将整个状态从 redux 传递给组件有什么缺点吗?
Are there any disadvantages to just passing the entire state to components from redux?
我在 Redux 和 React 中使用 ES6(?) 装饰器。在许多示例中,我看到人们明确指定哪些商店商品作为 props 传递。在某些示例中,我看到人们使用传播属性来传递所有内容,例如:
@connect((store) => {
return {
...store
}
})
export default class SomeComponent extends React.Component {
...
是否可以只对每个组件执行此操作,还是您应该挑选特定于该组件的道具?
是的,有。阅读组件实际使用的道具并不容易。此外,您未在组件中使用的道具可能会发生变化,并会触发不必要的重新渲染。
存在巨大的性能损失,因为在每个动作调度中,react-redux 都会运行每个连接组件的 mapStateToProps,然后浅比较旧 props 与新 props。如果有任何更改,包装的组件将重新呈现。基本上如果你传入整个商店,每个连接的组件都会在每个调度的动作上重新呈现。
我经历了 redux 开发的两种范例。
- 每个组件都获得所有动作和所有状态。
- 只有 container/parent/base 个页面获得所有 actions/state
- 只给 children 需要的东西
我发现了什么。是的,性能会受到影响,因为如果每个组件都有每个状态 属性,想象一下你更改一个状态值 - 每个组件都会获得该更新 - 无论它是否需要它。持续更新。
All night you are woken up:
Imagine your dog wakes up at 3:30am every night to go outside to pee.
Imagine your neighbor wakes up at 4am for work.
Imagine your other neighbor wakes up at 4:30 am for work.
Imagine your family wakes up at 5:15 am for work.
And you need to get up at 6:00am work.
在所有这些场景中,您都会被唤醒。随着时间的推移,你的工作效率如何?你会感到疲倦、迟钝等...
现在,想象一下 - 您只能在需要时要求被叫醒吗?而不是所有那些与你无关的其他时间?
我就是这么想的。因此,让您的 child 组件只知道它们关心的事情。
所以,我通常有容器 page/parent - 什么都知道 - 并把它需要的东西传下来。
警告 - 我发现,在某些情况下,child 组件(无论出于何种原因)需要了解几乎所有内容。对我来说,将每一件事都向下传递到多个级别 - 也会影响你一路传递的那些 children...
parent --->
child (just care about one thing) --->
child (just care about one thing)--->
child (I want alot of stuff)
我不喜欢把所有这些东西都传给那些 children,尤其是那些 children 更高层的人不在乎的时候。所以,在那个最深的 child 中,我从一开始就给它一切——而不是传递任何东西给它。
这对性能有一点影响,我会采取措施使代码更简洁。
但总的来说,不要给每个组件提供一切。随着时间的推移和应用程序的增长,性能会产生巨大差异。
我在 Redux 和 React 中使用 ES6(?) 装饰器。在许多示例中,我看到人们明确指定哪些商店商品作为 props 传递。在某些示例中,我看到人们使用传播属性来传递所有内容,例如:
@connect((store) => {
return {
...store
}
})
export default class SomeComponent extends React.Component {
...
是否可以只对每个组件执行此操作,还是您应该挑选特定于该组件的道具?
是的,有。阅读组件实际使用的道具并不容易。此外,您未在组件中使用的道具可能会发生变化,并会触发不必要的重新渲染。
存在巨大的性能损失,因为在每个动作调度中,react-redux 都会运行每个连接组件的 mapStateToProps,然后浅比较旧 props 与新 props。如果有任何更改,包装的组件将重新呈现。基本上如果你传入整个商店,每个连接的组件都会在每个调度的动作上重新呈现。
我经历了 redux 开发的两种范例。
- 每个组件都获得所有动作和所有状态。
- 只有 container/parent/base 个页面获得所有 actions/state
- 只给 children 需要的东西
我发现了什么。是的,性能会受到影响,因为如果每个组件都有每个状态 属性,想象一下你更改一个状态值 - 每个组件都会获得该更新 - 无论它是否需要它。持续更新。
All night you are woken up:
Imagine your dog wakes up at 3:30am every night to go outside to pee.
Imagine your neighbor wakes up at 4am for work.
Imagine your other neighbor wakes up at 4:30 am for work.
Imagine your family wakes up at 5:15 am for work.
And you need to get up at 6:00am work.
在所有这些场景中,您都会被唤醒。随着时间的推移,你的工作效率如何?你会感到疲倦、迟钝等...
现在,想象一下 - 您只能在需要时要求被叫醒吗?而不是所有那些与你无关的其他时间?
我就是这么想的。因此,让您的 child 组件只知道它们关心的事情。
所以,我通常有容器 page/parent - 什么都知道 - 并把它需要的东西传下来。
警告 - 我发现,在某些情况下,child 组件(无论出于何种原因)需要了解几乎所有内容。对我来说,将每一件事都向下传递到多个级别 - 也会影响你一路传递的那些 children...
parent --->
child (just care about one thing) --->
child (just care about one thing)--->
child (I want alot of stuff)
我不喜欢把所有这些东西都传给那些 children,尤其是那些 children 更高层的人不在乎的时候。所以,在那个最深的 child 中,我从一开始就给它一切——而不是传递任何东西给它。
这对性能有一点影响,我会采取措施使代码更简洁。
但总的来说,不要给每个组件提供一切。随着时间的推移和应用程序的增长,性能会产生巨大差异。