what is the preferred way to mutate a React state?

前端 未结 4 1130

Let\'s say I have a list of plain objects in my this.state.list that I can then use to render a list of children. What then is the right way to insert object in

相关标签:
4条回答
  • 2020-12-07 10:03

    setState() can be called with a function as a parameter:

    this.setState((state) => ({ list: state.list.concat(newObj) }))
    

    or in ES5:

    this.setState(function(state) {
      return {
       list: state.list.concat(newObj)
      }
    })
    
    0 讨论(0)
  • 2020-12-07 10:11

    concat returns a new array, so you can do

    this.setState({list: this.state.list.concat([newObject])});
    

    another alternative is React's immutability helper

      var newState = React.addons.update(this.state, {
          list : {
            $push : [newObject]
          }
      });
    
      this.setState(newState);
    
    0 讨论(0)
  • 2020-12-07 10:19

    From the react docs (https://facebook.github.io/react/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous):

    Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.

    So you should do this instead:

    this.setState((prevState) => ({
      contacts: prevState.contacts.concat([contact])
    }));
    
    0 讨论(0)
  • 2020-12-07 10:22

    Update 2016

    With ES6 you can use:

    this.setState({ list: [...this.state.list, ...newObject] });
    
    0 讨论(0)
提交回复
热议问题