【发布时间】:2018-11-03 18:12:23
【问题描述】:
创建小部件列表时出错
如果我第一次点击小部件列表,我可以创建小部件(小部件 1)。
如果我为其创建另一个小部件,我会收到错误(状态突变)。
如果我创建另一个小部件,我可以创建没有错误的小部件(小部件 3)
错误:在路径 `` 中检测到调度之间的状态突变。这可能会导致错误的行为。
代码
addWidget = (widgetType) => {
let newWidget = {};
switch (widgetType) {
case 'venn':
newWidget = {
widgetName: `widget ${this.state.widgetCount}`,
widgetType: 'venn',
leftTarget: '',
rightTarget: '',
leftTargetValue: 0,
rightTargetValue: 0,
position: { row: 0, col: 0 },
};
break;
default:
newWidget = {
widgetName: `Default ${this.state.widgetCount}`,
widgetType: 'venn',
leftTarget: '',
rightTarget: '',
};
break;
}
this.setState(prevState => ({
widgetsList: [...this.state.widgetsList, newWidget],
isHidden: !prevState.isHidden,
widgetCount: this.state.widgetCount + 1,
}), () => this.props.storyboardActions.addWidget(newWidget, this.props.selectedBoard.boardId));
};
减速器
case types.ADD_NEW_WIDGET: {
const newBoardList = state.boardList.map((item) => {
if (item.boardId === action.selectedBoardId) {
return {
...item,
modifiedAt: Date.now(),
widgetList: [...(item.widgetList || []), { widgetId: uuid(), ...action.newWidget }],
};
}
return item;
});
return { ...state, boardList: [...newBoardList] };
}
动作
export const addWidget = (newWidget, selectedBoardId) => ({
type: types.ADD_NEW_WIDGET,
payload: {
widget: newWidget,
boardId: selectedBoardId,
},
});
【问题讨论】: