Immerjs redux reducer的forEach内部突变(使用immer.js)

Immerjs redux reducer的forEach内部突变(使用immer.js),immerjs,reduxjs-toolkit,eslint,javascript,redux,redux-toolkit,immer.js,Immerjs,Reduxjs Toolkit,Eslint,Javascript,Redux,Redux Toolkit,Immer.js,我找到了一个解决这个问题的方法,但感觉很糟糕。我有一个自定义属性isMultipleValid如果该属性是true,我需要迭代一个对象数组并在每个对象上设置isValid:属性为false 值得注意的是,我还使用了 ),它允许我直接变异一个不可变的对象 带着任务 我想做的是: 但是,这会导致一个错误: 赋值给函数参数“o”的属性 { "resource": "<PATH>/quizEditorReducer.ts", "owner": "eslint", "c

我找到了一个解决这个问题的方法,但感觉很糟糕。我有一个自定义属性
isMultipleValid
如果该属性是
true
,我需要迭代一个对象数组并在每个对象上设置
isValid:
属性为
false

值得注意的是,我还使用了 ),它允许我直接变异一个不可变的对象 带着任务

我想做的是: 但是,这会导致一个错误:

赋值给函数参数“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
}
现在这会起作用,但感觉完全错了。有没有办法绕过这个



PS:是的,我知道我可以简单地对这个文件执行
/*eslint no param reassign:0*/
,但感觉应该有一些方法来满足中间的两端

您可以更具选择性地禁用lint规则,并对该行执行
//eslint禁用下一行no param reassign
。您使用的库支持+鼓励变异,但您有一个lint规则阻止它。其中一个必须赢。您可以采用一种不变的方法,使用
.map
而不是
.forEach
,但这在某种程度上会破坏使用immer的目的。禁用lint规则似乎是个不错的选择。我对immer.js一点也不熟悉,但这可能会有所帮助
question.questionOptions.map(o=>Object.assign(o,{isValid:false}))
在禁用lint规则并仅对该行执行
//eslint禁用下一行无参数重新分配时,您可以更具选择性。您使用的库支持+鼓励变异,但您有一个lint规则阻止它。其中一个必须赢。您可以采用一种不变的方法,使用
.map
而不是
.forEach
,但这在某种程度上会破坏使用immer的目的。禁用lint规则似乎是个不错的选择。我对immer.js一点也不熟悉,但这可能会有所帮助
question.questionOptions.map(o=>Object.assign(o,{isValid:false}))
{
    "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
      }
   }
})