Javascript 为什么';这不会改变我的redux状态吗?

Javascript 为什么';这不会改变我的redux状态吗?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我的状态中有一个对象数组。 我想做的是找到具有正确id的问题,然后找到具有正确id的答案以更改其值并将其更新为状态 以下是我得到的: function updateObject(oldObject, newValues) { return Object.assign({}, oldObject, newValues); } function updateItemInArray(array, questionId,answerId, updateItemCallback) { const

我的状态中有一个对象数组。 我想做的是找到具有正确id的问题,然后找到具有正确id的答案以更改其值并将其更新为状态

以下是我得到的:

function updateObject(oldObject, newValues) {
  return Object.assign({}, oldObject, newValues);
}

function updateItemInArray(array, questionId,answerId, updateItemCallback) {
  const getQuestion = array.map(item => {
    if(item.id !== questionId) {
      return item;
    }
  })
  const updatedItem = getQuestion[0].answers.map(answer => {
    if(answer.id !== answerId) {
      return answer;
    }
​
    const updatedItem = updateItemCallback(answer);
    return updatedItem;

  });
​
  return updatedItems;
}



export function answerUpdate(state = [], action){
  switch(action.type){
    case 'ANSWER_UPDATE_FETCH_SUCCESS': {
      const newAnswer = updateItemInArray(state.project, action.questionId, action.answerId, answer => {
        return updateObject(answer, {value : action.newValue});
      });
    }
  }
}
我正在看的东西有点明显,但它看起来像这样

project = [
  question = {
    id:"some Id",
    answers:  [
    {
      id:"another id",
      value="someValue"
    }
    ]
  }
]
和其他一些性质,但这与这个问题无关。
感谢每一个答案

您需要更新映射本身中的数据,而不是创建变量,映射函数返回具有更新值的新数组,并且您正在更新数组的第0个索引,该索引不是您要查找的索引

function updateItemInArray(array, questionId,answerId, newValue) {
  return array.map(item => {
      if(item.id !== questionId) {
        return item;
      } else {
        item.answers.map(answer => {
          if(answer.id !== answerId) {
            return answer;
          } else {
            updateObject(answer, { value : newValue})
          }
        });
      }
    });
}

export function answerUpdate(state = [], action){
  switch(action.type){
    case 'ANSWER_UPDATE_FETCH_SUCCESS': {
      return updateItemInArray(state, action.questionId, action.answerId, action.newValue);
    }
  }
}

它在redux reducer中,因此我在函数answerUpdate中返回的值进入我的状态。是的,抱歉,一开始没有看到您正在使用redux。我想这是因为数组的嵌套级别:当您使用
setState
或redux时,它只检测修改的“第一级”。如果您在状态内部修改了某些内容,则它不会意识到它。您必须克隆顶部对象才能传递新对象,以便可以检测到它并触发刷新!我不知道我是否理解你的意思,那实际上是怎么回事?我在这里不是这样做的吗返回Object.assign({},oldObject,newValues);我是说阵列!对不起,不准确。当您创建一个新对象时,我认为它会将其与当前状态进行比较。好吧,它不是同一个实例,但为了防止刷新,它将测试子属性。它看到的是同一个数组,所以它停在这里,没有看到数组的内容发生了变化。我要更深入地看一看,但我能感觉到这是我想的那样!但是我不需要在reducer函数的开关中返回一些东西吗?还有@eramit2010在这个reducer之后,我该如何让它进入状态?它是在这个减速器之后进入状态,还是我需要在某个地方接收值?我的错。我们需要返回函数本身。你是什么意思?好的,但它仍然不会改变我的状态,我需要在某个地方接收它吗?现在我只有一个动作叫这个减速机