redux的 action
and reducer
仅仅是用来存放数据的,而不是展示数据的。所以,不要想着怎么设计展示的action或者reducer
一、action
1.1 基础
先讲一句,dispatch只接受action,action是一个对象字面量。
action必须的key是type
,指定action类型,可以自行增加其他key将自己的数据携带。
官网建议是包装成函数,返回action,这样不用写type,很方便。
其他看官网,都有。
1.2异步action
基础说到dispatch只支持action,异步action就是action的包装函数返回的不是action,而是一个异步函数。实现机制原理,返回的异步函数的参数会得到dispatch,这样就能通过dispatch发送action了。
实现异步要通过中间件,中间键如何实现的自己去看,有点和node平台的express、koa等等的中间件的思想相同。
当然,为啥不在视图层使用类似的异步操作呢?主要是为了规范,视图最好只管展示渲染,异步操作统一封装进action的包装函数中,也方便统一管理。很多思想在redux都可以借鉴,redux也是借鉴了flux,我没看过flux,但也是在很多地方听说过,比如vuex。
二、 reducer
reducer是根据传入的action的type来修改state状态树。
-
必须是纯函数
-
必须有默认返回值,返回值也必须不能为undefined,可以是null,不然会报错。
-
默认返回值最好是传入参数state,方便createStore初始化state。
查阅redux初始化仓库函数createStore源代码容易知道,createStore会调用一次dispatch来初始化,其发起的action的type是随机数,也就是说不会匹配到任何一个type,就会调用所有reducer的默认值。
所以,最好默认值是原始参数state,不要返回其他值,方便统一在createStore初始化。当然你用educer的默认值初始化也可以,就是会很多地方需要考虑,很麻烦。
综合来看,默认值就是为了初始化的,createStore初始化时没有初始state传入的话,state状态树相对应的位置就为空。
注意到,如果dispatch默认返回值是其他的东西而不是传入参数state,则createStore传入的初始的state就会失效,得到的state树就是各个reduce的默认值,所以编写代码根据需要自行斟酌。
三、相关链接
© 著作权归作者所有
发表评论