将 useReducer 与 useState 组合在同一个组件中
Combine useReducer with useState in the same component
我使用包含我的状态的反应钩子 useReducer
,假设我有 3 个状态字段 - a
、b
和 c
。
这些字段联系在一起并且大部分一起变化 - 所以 reducer 函数是内聚的。
如果我有不同的状态字段 d
与其他状态不一致 - 我是否应该同时使用 useState
(对于 d
)和 useReducer
(对于 a
,b
和 c
) 在同一个组件中还是使用相同的 reducer 函数更好?此外 - 如果我有更多像 d
这样的字段在相似的地方发生变化 - 我应该使用 2 个单独的减速器吗?
这种情况下的最佳做法是什么?
我的建议是同时使用 useState
和 useReducer
,因为 useReducer
只是对 useState
的抽象。
就像您不会尝试将组件的所有状态塞进一个 useState
挂钩一样,您可能也应该避免为 useReducer
.
这样做
我倾向于尝试将 useReducer
抽象为全局上下文,并结合使用 useContext
和 reducer 来获取我的应用程序状态。但是,如果组件具有内部状态,有时使用 useContext
和 useState
是有意义的。话虽如此,我认为目前 hooks 没有任何硬性规定,所以我会阅读更多内容并为您的团队做出最佳选择。话虽如此,我确实同意 IliasT 关于将状态塞入一个 useState 的说法。如果您使用 useState
挂钩,请为每个状态使用一个挂钩,不要尝试创建一个控制状态的对象。
我使用包含我的状态的反应钩子 useReducer
,假设我有 3 个状态字段 - a
、b
和 c
。
这些字段联系在一起并且大部分一起变化 - 所以 reducer 函数是内聚的。
如果我有不同的状态字段 d
与其他状态不一致 - 我是否应该同时使用 useState
(对于 d
)和 useReducer
(对于 a
,b
和 c
) 在同一个组件中还是使用相同的 reducer 函数更好?此外 - 如果我有更多像 d
这样的字段在相似的地方发生变化 - 我应该使用 2 个单独的减速器吗?
这种情况下的最佳做法是什么?
我的建议是同时使用 useState
和 useReducer
,因为 useReducer
只是对 useState
的抽象。
就像您不会尝试将组件的所有状态塞进一个 useState
挂钩一样,您可能也应该避免为 useReducer
.
我倾向于尝试将 useReducer
抽象为全局上下文,并结合使用 useContext
和 reducer 来获取我的应用程序状态。但是,如果组件具有内部状态,有时使用 useContext
和 useState
是有意义的。话虽如此,我认为目前 hooks 没有任何硬性规定,所以我会阅读更多内容并为您的团队做出最佳选择。话虽如此,我确实同意 IliasT 关于将状态塞入一个 useState 的说法。如果您使用 useState
挂钩,请为每个状态使用一个挂钩,不要尝试创建一个控制状态的对象。