我找到了解决这个问题的方法,但感觉很丑。我有一个自定义道具isMultipleValid
,如果那个道具是true
,我需要遍历一个对象数组并在每个对象isValid:
属性上设置为false
值得注意的是,我还使用了 immerjs(自动包含在 reduxjs-toolkit中),它允许我通过赋值直接改变不可变对象
我想做的事:
const reducer = createReducer({//...}, {
[someAction.type]: (state, action) => {
const { questionId, isMultipleValid } = action.payload;
const question = state.find((q) => q.id === questionId);
if (question) {
if (!isMultipleValid) {
question.questionOptions.forEach((o) => {
o.isValid = false;
}
}
// ... more code here, but skipped for readability
}
}
})
然而,这会导致eslint错误:
分配给函数参数“o”的属性。
{ "resource": "<PATH>/quizEditorReducer.ts", "owner": "eslint", "code": "no-param-reassign", "severity": 8, "message": "Assignment to property of function parameter 'o'.", "source": "eslint", "startLineNumber": 39, "startColumn": 11, "endLineNumber": 39, "endColumn": 12 }
需要做什么:
现在感觉很丑陋,有一种解决方法可以简单地将值重新分配给一个临时变量,如下所示:
const reducer = createReducer({//...}, {
[someAction.type]: (state, action) => {
const { questionId, isMultipleValid } = action.payload;
const question = state.find((q) => q.id === questionId);
if (question) {
if (!isMultipleValid) {
let temp;
question.questionOptions.forEach((o) => {
temp = o;
temp.isValid = false;
}
}
// ... more code here, but skipped for readability
}
}
})
现在这将起作用,但感觉完全错误。有没有办法绕过这个?
PS:是的我知道我可以简单地/* eslint no-param-reassign: 0 */
为这个文件做,但仍然感觉应该有一些方法来满足中间的两端