在开始使用 React.js 之后,它似乎props是静态的(从父组件传入),而state根据事件进行更改。但是,我在文档中注意到对 的引用componentWillReceiveProps,其中特别包括以下示例:
props
state
componentWillReceiveProps
componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); }
这似乎意味着可以根据与 的比较nextProps来更改组件上的属性this.props。我错过了什么?道具是如何变化的,还是我弄错了它的调用位置?
nextProps
this.props
一个组件不能更新它自己的 props,除非它们是数组或对象(让一个组件更新它自己的 props,即使可能是一种反模式),但是可以更新它的 state 和它的孩子的 props。
例如,仪表板speed在其状态中有一个字段,并将其传递给显示此速度的 Gauge 子项。它的render方法就是return <Gauge speed={this.state.speed} />。当仪表板调用this.setState({speed: this.state.speed + 1})时,仪表会使用 的新值重新渲染speed。
speed
render
return <Gauge speed={this.state.speed} />
this.setState({speed: this.state.speed + 1})
就在这发生之前,会componentWillReceiveProps调用 Gauge,以便 Gauge 有机会将新值与旧值进行比较。