- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道 React 优化的一个关键点是使用 shouldComponentUpdate()
生命周期钩子(Hook)来检查当前状态/ Prop 与下一个/状态 Prop 。
如果我正在构建一个主要使用功能组件而不是基于类的有状态组件(可以访问生命周期 Hook )的 React 应用程序,我是否会放弃这种特定的优化?我可以在功能组件内部执行类似的检查吗?
最佳答案
无状态组件是 future 优化的候选对象,文档对此进行了暗示,但没有详细说明:
In an ideal world, most of your components would be stateless functions because in the future we’ll also be able to make performance optimizations specific to these components by avoiding unnecessary checks and memory allocations. This is the recommended pattern, when possible.
但是目前,如果 props 不变,无状态组件不会通过跳过渲染过程来优化性能。这已得到 React 团队成员的确认:
For complex components, defining
shouldComponentUpdate
(eg. pure render) will generally exceed the performance benefits of stateless components. The sentences in the docs are hinting at some future optimizations that we have planned, whereby we won't allocate an internal instance for stateless functional components (we will just call the function). We also might not keep holding the props, etc. Tiny optimizations. We don't talk about the details in the docs because the optimizations aren't actually implemented yet (stateless components open the doors to these optimizations).[...]
There are discussions about having a
pureRender
flag that you could set on the function, or allowing it to participate in the shouldUpdate lifecycle, but that's currently not implemented. At the moment, stateless functions can not be pure-render.It is worth keeping in mind that sometimes people abuse/overuse pure-render; it can sometimes be as or more expensive than running the render again, because you're iterating over the array of props and potentially doing things like string compares, which is just extra work for components that ultimately return true and then proceed to rerender anyway. PureRender /
shouldComponentUpdate
really is considered an escape hatch for performance and is not necessarily something that should be blindly applied to every component.
我从这次讨论中得出的结论是,在某些复杂组件的情况下,与无状态组件相比,通过实现 shouldComponentUpdate
可以提高性能。另一方面,我会认真考虑性能优势是否足以抵消组件增加的复杂性和更大的占用空间。
关于javascript - 通过 shouldComponentUpdate 对无状态、函数式组件进行 React 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383832/
请看一下我的代码。我尝试限制给定无状态组件的重新渲染,但这样做发现 shouldComponentUpdate 永远不会被调用。我已经从 styledComponents 中删除了包装器(之前有人报道
在文档中找不到与此相关的任何内容,我需要对父状态更改进行一些浏览器操作,而不重新渲染子组件。我可以在“shouldComponentUpdate”中执行此操作并让它返回 false,但只是想知道这对服
假设我有一个渲染子项的组件,但这些子项可以通过redux连接或基于计时器的更新组件。父组件不知道这一点。然而,父组件实现了 shouldComponentUpdate 来优化性能。 class Con
如何将 shouldComponentUpdate 用于状态? 我可以检查: shouldComponentUpdate(nextProps, nextState) { return this.s
我试图找出 React 生命周期方法 shouldComponentUpdate 最惯用的实现。我觉得我,可能还有其他人,并没有充分利用这种方法,因为它是可选的。 通常我想检查对象的 props 或
问题 我的父类包含项目列表并为列表中的每个项目呈现组件。当某些项目发生更改(即使只有一个)时,列表中的所有项目都将被重新渲染。 所以我尝试实现shouldComponentUpdate()。我正在使用
我有两个组件。一个是父组件(连接到 redux 的智能组件),另一个是在数组迭代中渲染的子组件。 每当从子组件分派(dispatch)某些 redux 操作时,存储中的状态就会更改,并且重新渲染整个元
我有两个组件。一个是父组件(连接到 redux 的智能组件),另一个是在数组迭代中渲染的子组件。 每当从子组件分派(dispatch)某些 redux 操作时,存储中的状态就会更改,并且重新渲染整个元
我使用 Reflux.connect 方法来改变组件状态,但我无法在 shouldComponentUpdate 中获取 nextState 和 this.state。实际上,当 shouldComp
假设我有一个应该每 6000 毫秒更新一次的 Timestamp 组件。这是基础: class Timestamp extends Component { static propTypes = {
我的 React 类 EventTable 有几种模式,根据模式,它从服务器获取不同的数据并将它们显示到 中。 .我首先让类显示静态数据并且它工作得很好,包括通过来自更高组件的 prop 切换 mo
我在项目中使用 react 运动动画。我通过维护状态解决了每次 Prop 更改时渲染动画的问题。 const {animation} = this.state; if (animati
我的代码有一个组件,它同时接受 props 并有自己的内部状态。 组件应仅在其 Prop 更改时重新渲染。状态更改不应触发重新渲染。 此行为可以通过基于类的组件和自定义 shouldComponent
我有一个像这样的高阶组件 // higherOrderComponent.js const HigherOrderComponent = Component => class extends Reac
LoDash 有精彩的 method _.isEqual。使用以下方法是个好主意吗: shouldComponentUpdate(newProps, newState) { return !_.i
我是 React 新手,只是想问一下组件的状态对象如何更新。经过分析一些代码,我认为: 在更新阶段,状态在 shouldComponentUpdate 方法之后但在 render 方法之前更新,我的理
如果我使用 Immutable.js,react-redux 仍然可以使用 shouldComponentUpdate 吗? connect()方法在shouldComponentUpdate()中使
我的组件加载中有多个 setState。我的页面在单击下拉值时重新呈现,因为单击时我通过 setState 存储这些值。 这里要停止点击时重新渲染,我使用下面的代码。 shouldComponentU
如果我使用 Immutable.js,react-redux 仍然可以使用 shouldComponentUpdate 吗? connect()方法在shouldComponentUpdate()中使
我正在开发一个 React 应用程序,并偶然发现了一种情况,如果我不使用 shouldComponentUpdate() 来阻止,我的组件就会不断地相互更新。我正在尝试确定这是否是处理此类更改的最佳方
我是一名优秀的程序员,十分优秀!