【发布时间】:2018-03-14 01:25:56
【问题描述】:
在我的应用程序的根目录中,我有两个 React 组件,Menu 和 Main。菜单通过将其平移到视口的左侧而被隐藏。当它可见时,我还希望将主要内容翻译到右侧。为此,我只需将 menuOpened 属性(布尔值)传递给两个组件。它将应用设置 CSS 变换属性 translateX() 的条件样式。问题是,当我更新道具时,所有的孩子都会重新渲染。有没有更好的做法来改变组件的样式/状态/道具?
【问题讨论】:
-
所有孩子重新渲染有什么问题?如果您除了顶级容器的样式属性之外没有修改任何内容,这应该很快。
-
也许我高估了这个问题。我认为重新渲染所有内容很奇怪,因为我只更改了一个 CSS 属性。
-
您不会重新渲染所有内容。请参阅下面的评论:)
-
了解 react 的渲染方式:它计算组件在其 props 或 state 发生变化时发生变化(如果不是全部,子树中的大多数组件都不是这种情况),然后构建一个虚拟 DOM,然后将虚拟 DOM 与实际 DOM 进行比较,并且仅在此时开始修改实际 DOM(这是循环中最昂贵的部分)。这就是它的酷炫之处:它永远不会丢弃所有页面并在每次单个 prop 值更改时重新渲染它。
标签: javascript css reactjs