为什么我的 reducer hook 会忽略我的 if 语句?

why does my reducer hook ignore my if statment?

当 运行 我的 reducer 调度方法在这里:

function reducer(state, action) {
    switch (action.type) {
  
 case "updateBox":
    return     state.map((input, index) => {
     input.map((data, NextIndex)=>{

if (action.NextIndex === NextIndex) { data.comment = action.text } else {data.comment = data.comment}
     })       
        });
     

开发工具显示,无论 action.Nextindex = NextIndex,data.comment 将始终更改为 action.text。

其他代码:

let object = {
    comment:""
}
let box = [object, object]
let list = [box, box]



 const [listState, listDispatch] = useReducer(reducer, list);

      { listState.map((data, index)=> (
{data.map((input, NextIndex)=>(


        <TextField value={data[NextIndex].comment} 
        onChange={(e)=>{listDispatch({type:"updateBox", text:e.target.value, field:"comment", NextIndex, index})}}
multiline fullWidth variant="outlined"/>


)})}

沙盒link

https://codesandbox.io/s/charming-sid-wdn0h?file=/src/App.js

仅仅因为变量不处于 React 状态并不意味着它是按值复制的。

当每个变量改变时,其他变量也会改变。

更好的方法是将映射方面替换为:

  let stateCopyr = [...listState];
    stateCopyr[action.index][action.NextIndex].comment = action.text
    console.log(stateCopyr)
    console.log("update")
    return stateCopyr