【问题标题】:Does React re-render all components when any state changes within context consumers?当上下文消费者中的任何状态发生变化时,React 是否会重新渲染所有组件?
【发布时间】:2020-11-20 21:20:19
【问题描述】:

我正在构建一个应用程序,我开始将我在各处传递的大量道具移动到上下文中。本质上,我有一个包含许多子组件的上下文提供程序组件。

自从我这样做后,我在重新渲染时遇到了麻烦。更具体地说,我在一个组件中有一个图表,当兄弟组件中的状态更改不应该对图表产生影响(不作为道具或共享上下文变量传入)时,它会重新渲染。

这是预期的行为吗?如果是,那么我是否应该尽可能地“本地化”上下文?

【问题讨论】:

标签: reactjs


【解决方案1】:

默认行为是当一个组件渲染时,它的子组件也会渲染。这反过来会导致孙子渲染,等等。

您可以使用PureComponent / shouldComponentUpdate(在类组件中)或React.memo(在函数组件中)跳过渲染组件。这些技术可以让你指定如果 props 没有改变,那么组件就不需要再次渲染。如果跳过渲染,那么组件下面的树也将被跳过,但需要注意的是:如果上下文值发生变化,使用上下文的组件重新渲染,即使它们的直接父级没有渲染。

将这些渲染阻止组件之一作为上下文提供程序的直接子级通常很好。这样,如果您唯一更改的是上下文值,那么将重新呈现的唯一组件就是那些显式使用上下文的组件。

【讨论】:

  • 谢谢!只需将我的图形组件的导出包装在 memo 中就解决了我的直接问题。我想我会期望并希望使用特定上下文值的组件在更改时重新呈现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2021-10-20
  • 2021-06-12
  • 2020-03-19
  • 1970-01-01
  • 2021-04-08
相关资源
最近更新 更多