在 ngrx 中创建 reducer 函数时,我读到的所有地方都说我应该返回原始/先前状态的副本。通过使用扩展运算符或使用库或像JSON.parse(JSON.stringify(state)).
但我在那里发现了一个问题,我找不到任何人在谈论它。reducer 返回的最后一个状态是将与所有当前订阅者和未来订阅者共享的状态。这意味着使用某个存储的所有组件将看到相同的状态对象。
这也意味着如果状态中的任何值在一个组件中发生更改(不分派操作),存储实际上将修改该值,但不会通知其他组件。如果要在任何地方共享,返回当前状态的副本有什么意义?
immutable 这个词一直在使用,但那个状态根本不是不可变的,因为 store 返回它自己的内部对象,而不是它的副本。
我了解不可变部分是否是开发人员需要遵循的概念。但是,原始对象/值的副本需要在使用它的组件中完成。从减速器返回浅拷贝或深拷贝似乎只是浪费处理能力和内存。