useState, useReducer
- 代码量, 一般情况下,useState 的代码量少一些。useReducer 因为要写 dispatch 和 reducer ,代码量会多一些,只有使用相似的访问、修改状态的方法的话,useReducer 的代码会少一些。
-
可读性,
useState
更加易读。但是状态太多的时候,会让代码难以理解,此时 useReducer 可以把状态更新和事件响应隔离。 -
调试,使用
useState
调试时,难以跟踪状态时如何更新的,使用useReducer
可以在每个 action 里面添加 console.log ,跟踪状态更新状况。 -
测试,
reducer
只是单纯的函数,可以进行单独测试。 -
个人便好,有人喜欢
useState
,有人喜欢useReducer
。其实本质上他们是等价的。
良好的 useReducer
- reducer 必须是纯函数,reducer 中不能发送 http 请求,订阅 setTimeout,产生副作用,即不能影响到组件外的世界。更新 Object 和 Array 时不能产生 mutation。
- action 应该是单一职能,即使它更新了很多数据,举例来讲,如果一个 form 里有一个重置按钮,它应该只发送一个 action 来重置整个 form,而不是给 form 里面的各个表单项分别发送重置 action。
reducer + context
将 reducer / context 组织在一个文件中,export 对应的 状态和 dispatcher,从而方便状态的组织。
网友评论