EasyPeasy store hook 导致在任何状态更改时重新渲染
EasyPeasy store hook causes rerender upon any state change
我们目前有一个 redux state,其嵌套模型具有以下结构。
{
groups: {
ids: [],
status: {},
error: {}
},
members: {
ids: [],
status: {},
error: {}
}
为方便起见,每个模型都有一个导出的挂钩,类型为;
export const useGroupState = () => useTypedState((state) => state.groups);
并这样使用;
const { ids } = useGroupState()
我们在整个应用程序中都使用这种语法。然而,我们最近注意到,在 任何 状态更改为 GroupState 时,即使它不修改 id,也会导致重新渲染。如果 Groups.status 更新,任何使用上述语法破坏的内容都将重新呈现。
我们使用
解决了这个问题
const ids = useTypedState(({groups}) => groups.ids)
但是,旧语法很方便,而且相当普遍。有没有一种方法可以保留旧语法但修复重新呈现行为?
谢谢,
我不知道这里 useTypedState
挂钩的确切实现,但假设它使用 React-Redux useSelector
hook inside:是的,这完全是预期的行为。 useSelector
如果 returned 引用自上次 以来发生变化,则重新呈现。如果您 return 一个对象,并且该对象被不可变地更新,那么它就是一个新的引用并将强制重新渲染。仅对部分字段进行解构在渲染进行后。
Your component should always select the smallest amount of actual state that it needs.
我们目前有一个 redux state,其嵌套模型具有以下结构。
{
groups: {
ids: [],
status: {},
error: {}
},
members: {
ids: [],
status: {},
error: {}
}
为方便起见,每个模型都有一个导出的挂钩,类型为;
export const useGroupState = () => useTypedState((state) => state.groups);
并这样使用;
const { ids } = useGroupState()
我们在整个应用程序中都使用这种语法。然而,我们最近注意到,在 任何 状态更改为 GroupState 时,即使它不修改 id,也会导致重新渲染。如果 Groups.status 更新,任何使用上述语法破坏的内容都将重新呈现。
我们使用
解决了这个问题const ids = useTypedState(({groups}) => groups.ids)
但是,旧语法很方便,而且相当普遍。有没有一种方法可以保留旧语法但修复重新呈现行为?
谢谢,
我不知道这里 useTypedState
挂钩的确切实现,但假设它使用 React-Redux useSelector
hook inside:是的,这完全是预期的行为。 useSelector
如果 returned 引用自上次 以来发生变化,则重新呈现。如果您 return 一个对象,并且该对象被不可变地更新,那么它就是一个新的引用并将强制重新渲染。仅对部分字段进行解构在渲染进行后。
Your component should always select the smallest amount of actual state that it needs.