菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
305
0

Redux

原创
05/13 14:22
阅读数 54604

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的默认值,所以编写代码根据需要自行斟酌。

三、相关链接

中文官网
github地址

发表评论

0/200
305 点赞
0 评论
收藏
为你推荐 换一批