为啥 React 保留 componentWillReceiveProps 和 shouldComponentUpdate 方法?
Posted
技术标签:
【中文标题】为啥 React 保留 componentWillReceiveProps 和 shouldComponentUpdate 方法?【英文标题】:Why React keep componentWillReceiveProps and shouldComponentUpdate methods both?为什么 React 保留 componentWillReceiveProps 和 shouldComponentUpdate 方法? 【发布时间】:2018-05-11 21:54:45 【问题描述】:当我使用react时,我发现这两个生命周期太相似了,componentWillReceiveProps接收nextProps作为参数,shouldComponentUpdate接收nextProps和nextState作为参数,所以我认为shouldComponentUpdate可以做同样的事情甚至更多,为什么react保持componentWillReceiveProps方法,我想知道这两种方法有什么区别
【问题讨论】:
您可能应该阅读文档。这两个生命周期函数虽然接收相同的道具,但服务于不同的功能并具有不同的触发器shouldComponentUpdate
用于让您接受或拒绝更新。如果一个 prop 改变了,你可能不想再次渲染组件,所以你会返回 false。 componentWillReceiveProps 是一种让您检查当前拥有的道具以及下一个道具将是什么的方法。 componentWillReceiveProps(nextProps)
.
我投票结束这个问题,因为这个问题的答案在 React 文档中得到了很好的解释
基于该逻辑,您可以关闭 S/O 的大部分答案/问题,因为几乎所有内容都可以在某种文档中找到,因此绝对不允许出于这个原因而严格关闭问题
【参考方案1】:
他们有两个不同的角色并在不同的情况下执行:
shouldComponentUpdate
将在每次 prop 或 state 中的某些东西发生变化时被调用(或者 React 认为它已经改变了)。它的功能是通过返回一个布尔值来确定组件是否应该重新渲染:true
如果组件应该重新渲染(这是默认返回值),或者false
如果不应该重新渲染。
您可以访问当前和下一个状态和道具,以比较并决定它是否真的应该重新渲染。您不应出于其他原因使用此方法。
另一方面,componentWillReceiveProps
只会在道具改变(或似乎改变)时被调用。如果只是状态发生变化,则不会调用此方法。
此外,这不会决定组件是否应该重新渲染。例如,您可以使用此方法更改某些状态或进行 API 调用。
查看这些链接:
componentWillReceiveProps
:https://developmentarc.gitbooks.io/react-indepth/content/life_cycle/update/component_will_receive_props.html
shouldComponentUpdate
:https://developmentarc.gitbooks.io/react-indepth/content/life_cycle/update/using_should_component_update.html
【讨论】:
【参考方案2】:componentWillReceiveProps - 正如函数名称所述,每当新的道具将被传递给组件时都会调用它,并且您可以根据新的道具状态触发操作
shouldComponentUpdate - 是一个过滤器函数,它决定是否应该重新渲染组件树。这个函数可以作为一个额外的过滤器,你正在改变的地方不需要重新渲染
更多信息here
【讨论】:
以上是关于为啥 React 保留 componentWillReceiveProps 和 shouldComponentUpdate 方法?的主要内容,如果未能解决你的问题,请参考以下文章