如何在反应中创建更多状态?反应状态的属性数量是否固定?

时间:2018-07-14 22:16:18

标签: javascript reactjs state

我知道我可以简单地一次性添加属性。 this.state={a:'1','b':2}。但是,如果我们想向state对象添加额外的属性,而不仅仅是在constructor中,或者需要根据条件添加属性,该怎么办?

是否仅应使用固定数量或属性? (我知道dictionaryarraysstate的元素。)

constructor(){
   super();
   this.state = { item: 'first item' }
   this.state = { item2: 'second item' } // Or += append are not accepted. 
}

很显然,React stateJS Object 因此,this.state.item2= 'new item';有用。

在以下评论中得到Andy RayMark E的答复。问题的另一部分:如何动态创建状态 The Reason并将其标记为已回答

谢谢大家

2 个答案:

答案 0 :(得分:1)

可以具有这样的动态状态:

class DynamicStateBasedOnProps extends React.Component{
  constructor(props){
    super();
    this.state = { static: 'I am static' };
  }
  componentDidMount(){
    const stateBasedOnProps = Object.keys(this.props)
      .map(key => ({[key]: this.props[key]}));

    this.setState(dynamicState)
  }
  render() {
    return <div>
      {JSON.stringify(this.state)}
    </div>;
  }
}

答案 1 :(得分:1)

您可以通过this.state在构造函数之外修改this.setState({...})对象,并且完全可以在其中添加新属性,因为它只是一个JS对象。不过请注意,this.state的每次修改都会导致render方法调用。

关于此的更多信息-https://reactjs.org/docs/state-and-lifecycle.html