我可以在 React.js 中更新组件的道具吗?

2022-08-30 00:22:49

在开始使用 React.js之后,它似乎是静态的(从父组件传入),而基于事件的更改。但是,我注意到文档中对组件WillReceiveProps的引用,其中特别包括此示例:propsstate

componentWillReceiveProps: function(nextProps) {
  this.setState({
    likesIncreasing: nextProps.likeCount > this.props.likeCount
  });
}

这似乎意味着,根据 与 的比较,组件上的属性可以更改。我错过了什么?道具是如何变化的,或者我是否误以为道具被叫到哪里?nextPropsthis.props


答案 1

组件不能更新自己的道具,除非它们是数组或对象(让组件更新自己的道具,如果可能的话是一种反模式),但可以更新其状态及其子级的道具。

例如,仪表板有一个处于其状态的字段,并将其传递给显示此速度的仪表子级。它的方法只是.当仪表板调用 时,仪表将使用 的新值重新呈现。speedrenderreturn <Gauge speed={this.state.speed} />this.setState({speed: this.state.speed + 1})speed

在此之前,将调用 Gauge,以便 Gauge 有机会将新值与旧值进行比较。componentWillReceiveProps


答案 2

道具

React 组件应该使用 props 来存储可以更改的信息,但只能由其他组件更改。

React 组件应该使用 state 来存储组件本身可以更改的信息。

Valéry已经提供了一个很好的例子。