React:正在访问 children 和 anti-pattern 的状态吗?
React: is accessing the state of children an anti-pattern?
我有一个组件需要在某个时候读取属于其 child 的状态变量。
是否应该将该特定状态变量移至 parent,并通过回调进行更改?
据我所知,其中一些可能是错误的,这些是将状态移动到 parent 的利弊:
亲:
这似乎更符合反应的单向数据流口头禅。
Con: parent 的其他 children 将在状态更改时重新渲染(不是在真实的 DOM 中,但它可能仍有性能影响)。
这里的最佳做法是什么?
数据流的最佳实践是:
- 从 parent 到 child:通过 props
- 从 child 到 parent:通过处理程序
- 从不相关的组件到另一个:通过消息总线
例如
<Child onEvent={this.handleEvent}>
parent 有:
handleEvent: function(dataFromChild) {
}
正如 Petka 指出的那样,国家应该居于首位。
Thinking in React 解释的很好。
Other children of the parent will be rerendered on state change (not in the real DOM, but it may still have a performance impact).
除非您以 60fps 的速度执行此操作,否则您不太可能注意到这一点。
如果你这样做,React 会为你提供可选的 shouldComponentUpdate
(and PureRenderMixin).
我有一个组件需要在某个时候读取属于其 child 的状态变量。
是否应该将该特定状态变量移至 parent,并通过回调进行更改?
据我所知,其中一些可能是错误的,这些是将状态移动到 parent 的利弊:
亲: 这似乎更符合反应的单向数据流口头禅。
Con: parent 的其他 children 将在状态更改时重新渲染(不是在真实的 DOM 中,但它可能仍有性能影响)。
这里的最佳做法是什么?
数据流的最佳实践是:
- 从 parent 到 child:通过 props
- 从 child 到 parent:通过处理程序
- 从不相关的组件到另一个:通过消息总线
例如
<Child onEvent={this.handleEvent}>
parent 有:
handleEvent: function(dataFromChild) {
}
正如 Petka 指出的那样,国家应该居于首位。
Thinking in React 解释的很好。
Other children of the parent will be rerendered on state change (not in the real DOM, but it may still have a performance impact).
除非您以 60fps 的速度执行此操作,否则您不太可能注意到这一点。
如果你这样做,React 会为你提供可选的 shouldComponentUpdate
(and PureRenderMixin).