为什么这不改变我的redux状态?

时间:2018-07-10 14:24:38

标签: javascript reactjs redux react-redux

我的状态中有一个对象数组。 我想做的是找到具有正确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"
    }
    ]
  }
]

和其他一些属性,但与该问题无关。 感谢每一个答案!

1 个答案:

答案 0 :(得分:0)

您需要更新map本身中的数据而不是创建变量,map函数将返回具有更新值的新数组,并且您正在更新数组的第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);
    }
  }
}