Javascript 在本地存储中存储我的react应用程序的布局不起作用
我正在使用和创建一些网格,这些网格可以拖放,也可以调整大小 所以我能够做到这一点,而且效果很好 我的UI就像我有两个选项卡,每个选项卡都有一些网格,所以当我从一个选项卡移动到另两个选项卡时,我会显示该选项卡的网格 我想做的事 在更改布局时,我希望将该布局存储到本地存储,以便在刷新或再次打开该选项卡时,网格的形成应该是我更改的 所以根据上面提到的Javascript 在本地存储中存储我的react应用程序的布局不起作用,javascript,reactjs,react-hooks,local-storage,react-grid-layout,Javascript,Reactjs,React Hooks,Local Storage,React Grid Layout,我正在使用和创建一些网格,这些网格可以拖放,也可以调整大小 所以我能够做到这一点,而且效果很好 我的UI就像我有两个选项卡,每个选项卡都有一些网格,所以当我从一个选项卡移动到另两个选项卡时,我会显示该选项卡的网格 我想做的事 在更改布局时,我希望将该布局存储到本地存储,以便在刷新或再次打开该选项卡时,网格的形成应该是我更改的 所以根据上面提到的 因此,我所做的是,当发生onLayoutChange时,我存储与active\u选项卡相关的布局,当我从一个选项卡更改为另一个选项卡时,我检查本地存储
- 因此,我所做的是,当发生
时,我存储与onLayoutChange
active\u选项卡相关的布局,当我从一个选项卡更改为另一个选项卡时,我检查本地存储并匹配哪个选项卡处于活动状态并获取特定布局
- 但这并没有发生,它只是采取了基本的布局
function getFromLS(key) {
let ls = {};
if (global.localStorage) {
try {
ls =
JSON.parse(
global.localStorage.getItem(localStorage.getItem("active_tab"))
) || {};
} catch (e) {
/*Ignore*/
}
return ls[key];
}
}
function saveToLS(key, value) {
if (global.localStorage) {
global.localStorage.setItem(
localStorage.getItem("active_tab"),
JSON.stringify({
[key]: value
})
);
}
}
- 布局的Onchange功能
const onLayoutChange = (layout, layouts) => { saveToLS("layouts", layouts); console.log("onchange"); setlayouts({ layouts }); };
我已经更新了我的代码沙盒,就像之前它在控制台ans上采用布局一样
未定义
现在它采用布局,解决方案将针对每个活动菜单运行generateDOM
:
const [DOM, setDOM] = useState(null)
useEffect(() => {
setDOM(generateDOM(data1[active_menu].comp_data))
}, [data1, active_menu]);
data1
也应该是依赖项,因为在添加和删除元素时需要重新计算“DOM”
呈现:
<ResponsiveReactGridLayout
{...props}
onLayoutChange={(layout, layouts) => onLayoutChange(layout, layouts)}
layouts={layouts}
cols={{ lg: 12, md: 4, sm: 6, xs: 4, xxs: 2 }}
>
{DOM}
</ResponsiveReactGridLayout>
onLayoutChange(布局,布局)}
布局={layouts}
cols={{lg:12,md:4,sm:6,xs:4,xxs:2}
>
{DOM}
我还将localStorage.getItem(“活动选项卡”)更改为active\u菜单
将控制台.log(布局)
放在onLayoutChange
内部。这是调试的第一步。查看布局
对象是否符合您的预期。是的,我已经完成了所有这些。您可以共享那些日志
的结果吗?您是否看到了预期的正确值?这些细节有助于加快调试速度。@LakshyaThakur我可以分享,但你也可以检查,我有这些东西的共享代码沙盒链接,你可以在这里查看日志。当我检查时,它是未定义的,我不知道怎么做?@LakshyaThakur我已经编辑了我的帖子,并在这里包含了更新的代码沙盒。控制台显示了你可以检查的布局。先生,我尝试了你的代码,它工作得很好,但我不得不问一个问题,即如何进行条件渲染。如果caseempName==“steve
那么w=6else
4我尝试了if(item.empName==“steve”){return{x:(I*2)%12,y:Math.floor(I/6),w:2,h:4,I:I.toString()};}else{return x:(I*2)%12,y:Math.floor(i/6),w:4,h:2,i:i.toString()};}
我尝试过这个,但没有成功