我们最近将代码库迁移到了 React18,并将 redux 升级到了最新版本。从那时起,我们面临一个问题,即对于代码中的任何错误,store.getState() 以某种方式返回初始状态值。当发生这种情况时,错误报告也是错误的,因为它破坏了其他地方的代码,而不是错误发生的确切位置。这使得识别实际错误变得非常困难。
在选择器中,如果我们使用 store.getState() 而不是使用 useSelector 钩子传递的状态,则会破坏应用程序。这是预期的行为吗?我知道在减速器中我们不应该使用 store.getState() 但在文档中我找不到在选择器中使用 store.getState() 是否是一个不好的做法。
当代码因错误而中断时,选择器中的 store.getState() 返回初始状态值,并抛出一些其他错误,因为 getState() 返回初始状态,这会导致错误报告。
一些选择器调用其中的方法,然后再次调用其他一些函数来产生最终输出。这些内部方法使用 store.getState() 而不是从根选择器传递状态。
主要原因是这些方法将状态值转换为以不同的格式返回,并且可以从组件和选择器中调用。所以主要是为了避免从各个地方传递状态。此外,在组件内,如果满足任何条件,则可以调用这些方法,这与需要在渲染开始时使用 useSelector 挂钩调用的选择器不同。
useSelector 和 getState 之间的根本区别在于,当组件使用 getState 时,React 并不知道该组件依赖于状态。
useSelector 告诉 React,当选择发生变化时,它应该触发新的渲染并使用更新数据。 getState 不会触发。