无法在React中更新嵌套对象的状态

时间:2018-01-13 09:19:03

标签: reactjs

我无法理解React中的状态变化。

我们说我有一个包含问题的测试组件,每个问题都有用户选择的答案。如上所述:

handleOptionSelect = (option) => {
  this.setState({
    ...this.state, 
      questions: {
        selectedAnswer: option.value
      }
    })
  } 

在应用程序中,一次只呈现一个问题。我想将每个用户答案存储在Test状态。对于选择过程,我的回调是:

class Test extends Component {
  state = {
    activeQuestion: 0
    questions: {
      {id: 1, selectedAnswer: 'B'},
      {id: 2, selectedAnswer: 'C'},
      {etc},
      {etc}
    }
  }   

当我遇到特定问题时,选择一个选项会正确更新状态。但是,每当我选择不同的问题(将activeQuestion设置为不同的数字)时,selectedAnswer值仍然存在。如何确保状态更改保留在父对象中?

编辑(提供更多上下文):我假​​设我可以初始化初始状态中的所有问题对象,如下所示,但这似乎耗时且效率低下。在此先感谢,所有

onMouseClicked

1 个答案:

答案 0 :(得分:2)

虽然我并非100%确定我理解你的要求,但你可以这样做。

具有空对象的初始state.questions

class Test extends Component {
  state = {
    activeQuestion: 0,
    questions: {
    }
  }

然后,当您需要更新活动问题时,您选择了答案

handleOptionSelect = (option) => {
  // it is better to pass a callback if your next state
  // depends on previous state due to async nature of setState

  this.setState(state => ({
    ...state,
    questions: {
      ...state.questions, // keep answers for "non active" questions
      [state.activeQuestion]: option.value // update only active question
    }
  }))
}