【发布时间】:2018-11-18 01:30:42
【问题描述】:
在这个上下文中,在 reducer 中更新状态的更好方法是什么?
case DELETE_INTEREST:
let deleteInterests = state.user.interests;
let index = deleteInterests.findIndex(i => i == action.payload);
deleteInterests.splice(index, 1);
return { ...state, user: { ...state.user, interests: deleteInterests } };
ESLint 不喜欢 reducer 中 case 块中的 let 语句,得到:
eslint: no-case-declaration - 意外的词法声明以防万一 阻止
【问题讨论】:
-
deleteInterests仍然是对状态数组的引用,因此您仍在变异。拼接前先克隆列表。 -
将
{}用于switch中的case DELETE_INTEREST以根据eslint.org/docs/rules/no-case-declarations 消除此棉绒问题