为什么下面使用useSelector会破坏引用相等性



我遇到了一个问题,从我的存储中选择某些值会触发带有任何存储值更新的重新发布程序,即使我选择的值没有更新。事实证明,问题是我在做这件事:

const transformedValues = useSelector(state => state.some.array).map(value => value);

正如对上述问题的回答所指出的,这打破了transformedValues的引用相等性,导致组件更新。

但当我这样做的时候,没有问题,也没有不必要的重读者:

const valuesFromStore = useSelector(state => state.some.array);
const transformedValues = valuesFromStore.map(value => value);

为什么?这两种策略的区别是:在第一种策略中,选择器的引用相等性被破坏(导致重新发布(,而在第二种策略中不导致重新发布?正在发生的事情;在引擎盖下";redux和javascript在这里有什么不同?

嗯。不是问题,也不会导致新引用。当state.some.value本身发生更改时,仅useSelector(state => state.some.value)会导致重新渲染。

我知道你在另一个问题中说过,更改它解决了你的问题,但根据我所看到的,该代码一开始确实不应该有任何问题。

相关内容

  • 没有找到相关文章

最新更新