在React中使用Redux数据流(讲解比较清晰,差代码)

课程地址:https://www.imooc.com/learn/744

164148_GDaT_3018050.png

164231_SJjD_3018050.png

164328_N5R1_3018050.png

164411_8Uze_3018050.png

164433_ZtxG_3018050.png

164454_48SS_3018050.png

164506_MoV6_3018050.png

node-引擎

webpack-构建

一、了解数据流

164748_p4uu_3018050.png

164910_vr9m_3018050.png

165010_5Dwl_3018050.png

this.props-父子组件间传递

this.state组件当前状态

二、安装框架及介绍

165421_4bjX_3018050.png

两个包安装(redux本身就是一个独立的框架)

165435_4ySJ_3018050.png

165630_TuNk_3018050.png

四个重要的文件夹

action-行为

components,container存放组件

reducer-分发行为

165735_Ve0L_3018050.png

index.html-模板,server.js-构建跑项目,webpack-打包项目

170013_lsJV_3018050.png

170513_bwjh_3018050.png

纯方法:传入什么,可直接传出不依赖其他,比如定时器什么

170649_SWcR_3018050.png

store由redux里的creatStore生成

170844_XcFl_3018050.png

三、官方demo

1.结构和相关配置介绍

171126_M8Qe_3018050.png

171132_td2S_3018050.png

171142_sRiJ_3018050.png

171154_PBuV_3018050.png

171221_wlDO_3018050.png

171238_OT7K_3018050.png

171252_auuX_3018050.png

171336_s2Gw_3018050.png

171348_MFvi_3018050.png

启动调试

171404_zQva_3018050.png

依赖版本

171422_RSm4_3018050.png

启动框架实例

171447_OE3m_3018050.png

171455_M7wB_3018050.png

组织文件

171510_Xvob_3018050.png

入口

171526_Ls0x_3018050.png

打包

171559_yo3k_3018050.png

171733_vo14_3018050.png

express:node下的最有名的一个服务器,像php,类似python下的django,java等web服务器。可以把一些数据动态插入在模板中。

171922_JR9z_3018050.png

比较简单

172007_Tjv5_3018050.png

一般是在内存里打包

172024_38NS_3018050.png

渲染进去的奖被转化为一个js标签,打包成一个文件

172154_hm6y_3018050.png

入口-热加载,运行文件

172224_nhbh_3018050.png

处理js

172233_I2oE_3018050.png

引入不需要加js了

172341_48W1_3018050.png

把高级的ES6,ES5或者语法糖转化成ES3来实现

172413_Y3xP_3018050.png

这个目录不需要转义

172432_hw3P_3018050.png

目录下运行,安装node_moudles

2.项目实现

(1)action添加用户行为

172614_GjMQ_3018050.png

在action目录下新建index.js

A.添加待办项的抽象动作:

172816_MBCW_3018050.png

172855_Ed7Y_3018050.png

给一个变量id,不用text是为了区分两个相同待办项不同时作用行为

B.设置可见

173026_IOCm_3018050.png

C.点击触发待办项行为

173104_TMMd_3018050.png

三种用户行为被描述完毕

(2)reducer对用户行为的相应

(添加和触发行为会影响)

173440_e3hP_3018050.png

描述todo添加待办项状态

173618_3bkP_3018050.png

Object.assign()是ES6新语法,把state和后面{}的对象进行合并,然后赋值在前面空{}这个对象里面

173829_nwAa_3018050.png

实际上是用不到的,但是为了完整也写上

173922_xyQ0_3018050.png

待办项列表

传入的state和输出的state都是个数组的概念

174100_0Im1_3018050.png

处理完待办项和待办项列表

174204_0OBN_3018050.png

在reducers下新建visibilityFillter.js,存放筛选器

174255_ROX3_3018050.png

174307_Vvza_3018050.png

状态树应在开发系统前就想好

174445_53AU_3018050.png

ES6:给state一个初始值,SHOW_ALL

174439_cMHt_3018050.png

打开后就会有选中状态

174556_GFlc_3018050.png

在todo.js里提供一个export方法

174704_pMol_3018050.png

在reducer下新建index.js,并且import引入相关方法

174806_famX_3018050.png

拆出方法,给输出

项目中系统的响应写完毕

(3)组件(稍微难,有es6语法和一些理解)

175116_WXgW_3018050.png

在components下新建App.js,存放三个组件

175145_ZYph_3018050.png

不同位置的区别,为了更好复用

175311_xXys_3018050.png

在container下新建AddTodo.js文件,引入react-redux的connect方法

175520_htMg_3018050.png

connect-高级写法

175557_HqJ8_3018050.png

查看源代码。

175702_IA80_3018050.png

一般普通方法会返回一个值,但是这个connect方法返回一个函数

connect方法写的挺好,有时间看看,只有300多行

175917_5hKx_3018050.png

增加dispatch进行分发

175941_76bx_3018050.png

180058_JmrV_3018050.png

传入的text由input写入,把ref进行绑定

180136_eZg6_3018050.png

添加AddTodo的button

把显示和逻辑混合在container里

下面,把显示和逻辑分离,写一个纯粹的container组件:

180337_E9If_3018050.png

在container下新建VisibleTodoList.js,引入相关

一个react组件是由两类props组成,一类是由他的state进行转换(点击按钮,他的状态会发生变化,props属性发生变化),另一类是由dispatch引发变化(一类行为要被分发的时候)

180654_eAWl_3018050.png

state影响

180756_BmSD_3018050.png

传入一个由component实现的组件

180855_F0xu_3018050.png

由dispatch影响,用户行为直接分发,定义在toggleTodo上,需要传入一个id

180957_o5VU_3018050.png

接下来写onTodoClick方法

181111_dgkj_3018050.png

在component下新建Todolist,js文件,假设Todo组件写好了。这里只关乎显示和布局,样式,和逻辑无关

181358_la4j_3018050.png

在component下新建Todo.js

方式2写完,完成分离

181542_X8Af_3018050.png

分析:上层逻辑组件,下层显示组件

181746_X6Lu_3018050.png

在component下新建footer.js组件-纯显示组件

181953_AyUa_3018050.png

在container下新建FilterLink.js文件。

182058_96u8_3018050.png

event怎么转化为action就是dispatch要实现的功能

182253_X7r6_3018050.png

在component下新建Link.js文件

4.入口文件包装

182340_BBiW_3018050.png

creatStore方法是有redux提供的,把我们所有的reducer通过响应来推断出store是什么样子的,用Provider包装起来,最后用react的render方法渲染在节点上,完成开发

 

四、扩展知识

182705_wBZl_3018050.png

182728_jQKI_3018050.png

182811_raHE_3018050.png

左边es6写法,右边react.creatClass

183001_Ugnm_3018050.png

 参考文档:

扩展阅读:https://github.com/jasonslyvia/a-cartoon-intro-to-redux-cn

转载于:https://my.oschina.net/u/3018050/blog/1795622

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值