1 回答

TA貢獻1744條經驗 獲得超4個贊
嘗試在這兩個更新您的數組聲明addNewModuleInLayout,并removeModule以
const newLayout = { ...this.state.layouts }; // from let newLayout = this.state.layouts
const newModule = [...this.state.modules]; // from let newModule = this.state.modules
在 cDM 中,您不會在狀態上創建模塊/布局數組的“新”副本,而是直接引用數組。當你更新數組時,你實際上改變了你的狀態,所以當你prevState與this.state字符串化版本進行差異時是相等的。
這不會深入復制您的布局對象,因此在推送到布局數組時您會遇到同樣的問題。您可以通過在更新布局而不是推送時創建新數組來解決此問題
newLayout[key] = [
...newLayout[key],
{
i: moduleData.type,
x: (newLayout[key].length * 1) % 3,
y: Infinity,
w: 1,
h: 5
}
]; // from newLayout[key].push({DATA}); in addNewModuleInLayout
因為你用filter在removeModule你那里應該很好
添加回答
舉報