为啥 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 方法?的主要内容,如果未能解决你的问题,请参考以下文章

React:如何动画化渲染组件的变化?

React:组件的生命周期

react学习笔记之组件生命周期

带有 React 的高阶 FRP - 为啥它没有发生?

随便扯扯React生命周期 --《爱看不看系列》

为啥要保留静态变量?