首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在React.js中更新组件的道具吗?

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

Stack Overflow用户
提问于 2014-07-25 00:50:38
回答 5查看 366.1K关注 0票数 255

在开始使用React.js之后,props似乎被设计为静态的(从父组件传入),而state则根据事件进行更改。但是,我在文档中注意到了对componentWillReceiveProps的引用,其中特别包含了这个示例:

代码语言:javascript
复制
componentWillReceiveProps: function(nextProps) {
  this.setState({
    likesIncreasing: nextProps.likeCount > this.props.likeCount
  });
}

这似乎意味着,根据nextPropsthis.props的比较,组件的属性可能会发生变化。我遗漏了什么?道具是如何改变的,还是我搞错了它的调用位置?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-25 04:52:35

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

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

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

票数 286
EN

Stack Overflow用户

发布于 2014-07-25 02:02:06

当组件的父组件再次呈现具有不同属性的组件时,属性可能会发生变化。我认为这主要是一种优化,因此不需要实例化任何新的组件。

票数 28
EN

Stack Overflow用户

发布于 2019-12-10 04:34:19

钩子发生了很多变化,例如componentWillReceiveProps变成了useEffect+useRef (as shown in this other SO answer),但是Props are still Read-Only,所以只有调用者方法应该更新它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24939623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档