在每个模块的仪表板中,其布局数据(使用 react-grid-layout)与模块数据分开存储,并且每个模块数据都存储在数据库中。当前模块数据和布局数据存储在 Dashboard 组件状态中。componentDidMount()每当模块或布局的先前状态与当前状态不同时,我试图在内部调用单独的 axios POST 请求,以保存数据库中的更改。但是通过调试和日志记录,我看到prevState等于this.state.
以下是改变相关状态的componentDidMount()方法和方法:
componentDidUpdate(prevProps, prevState) {
// JSON.stringify comparison for proof of concept since the order does not change
if(JSON.stringify(prevState.modules) !== JSON.stringify(this.state.modules))
API.post('Adminusers/StoreUserModuleData', "module_data=" + JSON.stringify(this.state.modules))
.then((res) => console.log(res))
.catch(err => {throw new Error(err)});
if(JSON.stringify(prevState.layouts) !== JSON.stringify(this.state.layouts))
API.post('Adminusers/StoreAdminUserLayouts', "layouts=" + JSON.stringify(this.state.layouts))
.then((res) => console.log(res))
.catch(err => {throw new Error(err)});
}
addNewModuleInLayout(moduleData) {
let newLayout = this.state.layouts;
let newModule = this.state.modules;
for (let key in newLayout) {
if (newLayout.hasOwnProperty(key)) {
newLayout[key].push({
i: moduleData.type,
x: (newLayout[key].length * 1) % 3,
y: Infinity,
w: 1,
h: 5
});
某个模块的模块数据和布局数据的示例如下:
// layouts
{
"md": [{ i: "current-user", x: 0, y: 0, w: 3, h: 5, isDraggable: false, isResizable: true }],
"lg": [{ i: "current-user", x: 0, y: 0, w: 3, h: 5, isDraggable: false, isResizable: true }],
"sm": [{ i: "current-user", x: 0, y: 0, w: 3, h: 5, isDraggable: false, isResizable: true }],
"xs": [{ i: "current-user", x: 0, y: 0, w: 3, h: 5, isDraggable: false, isResizable: true }]
}
// module data
[{ type: "current-user", content: " ", title: "Current User Module" }]
任何人都可以指导我在这里做错了什么,这两个州都是平等的吗?
慕无忌1623718
相关分类