react+redux教程(二)redux的单一状态树完全替代了react的状态机?
上篇react+redux教程,我们讲解了官方计数器的代码实现,react+redux教程(一)。我们发现我们没有用到react组件本身的state,而是通过props来导入数据和操作的。
我们知道react本身是个状态机,也就是说组件是state的表现形式。那么redux提供了一个全局的唯一的状态树,是不是就不需要组件本身的state了呢?
当然不是!
有图为证,这是官方的todomvc的例子(https://github.com/lewis617/react-redux-tutorial/tree/master/redux-examples/todomvc):
我们直接看react开发工具截图:
App组件没有state
Header组件没有state
MainSection组件有state
TodoItem组件有state
Footer组件没有state
何时用react组件的state、props?
从上面的截图我们可以发现,state只应用了两个功能:
- 列表的过滤功能,即完成、未完成、全部的选择
- 每一项的编辑与查看功能,即双击每一项,即可进入编辑状态
有此我们可以得出结论,state只表示一些"临时的""内部的"状态数据。
临时的,代表你可以临时改变这个数据,比如显示完成、未完成、全部的任务,这都是临时的状态,还有任务处于编辑状态或者查看状态都是临时的。
内部的,代表如果你的数据只需要在这一个组件中使用,那么你应该使用组件的内部状态。
props则正好相反,它通常存储一些方法,一些可能需要存库的长期数据和一些需要传递和共享的数据。
比如App组件中的todos代表任务数组,actions代表一些操作的方法,这些我们都存进了props中。还有Footer组件中的activeCount以及completedCount都是长期存在的数据,而且可能不止一个组件在使用。
对比Redux的全局唯一的state
我们在开发工具上查看全局唯一状态树,发现是个todos数组。对应的是长期数据(并不一定要求是长期数据)和用于在多个组件中共享的数据。
再看redux+react流程
redux和react两个搭档之间,基本只有两种联系:
- react从redux的state读取数据
- react能dispatch分发actions到redux,redux的reducer来返回一个新的state
react组件就像是个婴儿,redux就像是奶妈:
- 婴儿饿了,哭着要要奶喝,就是dispatch actions的过程
- 奶妈准备好给婴儿喂奶就是,react从redux的state读取数据的过程
结论:redux的state和react组件的state没有半毛钱关系
现在我们知道redux的state装得是全局的,长期数据(并不一定要求是长期数据)也就是对应props的数据。而react组件的state,官方建议不要放这类数据,而应该是临时的内部状态数据。所以两个state没有半毛钱关系!
教程源代码及目录
如果您觉得本博客教程帮到了您,就赏颗星吧!
https://github.com/lewis617/react-redux-tutorial
react+redux教程(二)redux的单一状态树完全替代了react的状态机?的更多相关文章
- React入门教程(二)
前言 距离上次我写 React 入门教程已经快2个月了,年头年尾总是比较忙哈,在React 入门教程(一)我大概介绍了 React 的使用和一些注意事项,这次让我们来继续学习 React 一. Rea ...
- react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware
今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...
- Redux 学习(1) ----- Redux介绍
Redux 有三个基本的原则: 1,单一状态树,redux 只使用一个javascript 对象来保存整个应用的状态. 状态树样式如下: const state = { count: 0 } 2,状态 ...
- react开发教程(六)React与DOM
ReactDOM findeDOMNode 语法:DOMElement findDOMNode(ReactComponent component)描述:获取改组件实例相对应的DOM节点 案例: imp ...
- 【前端,干货】react and redux教程学习实践(二)。
前言 这篇博文接 [前端]react and redux教程学习实践,浅显易懂的实践学习方法. ,上一篇简略的做了一个redux的初级demo,今天深入的学习了一些新的.有用的,可以在生产项目中使用的 ...
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
- react+redux教程(四)undo、devtools、router
上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...
- Redux教程2:链接React
通过前面的教程,我们有了简单的环境,并且可以运行Redux的程序,也对 如何编写Redux示例 有了初步的印象: 掌握了 使用Redux控制状态转移 ,继而驱动 React 组件发生改变,这才是学习R ...
- 优雅的在React项目中使用Redux
概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...
随机推荐
- eclipse 项目显示红叉
***修改eclipse 代码提示级别1.单个项目修改项目上右键-->properties-->java compiler-->building-->enable projec ...
- ajax内调用WCF服务
WCF可以当作WebService一样被调用,在html内通过ajax调用WCF服务的方法如下: 1.新建一个WCF服务的网站项目: 2.在项目内增加一个新项:启用了ajax的WCF服务: 3.在对应 ...
- canvas图片处理
1.灰度 .299 * r + .587 * g + .114 * b; 2.连环画效果 R = |g – b + g + r| * r / 256 G = |b – g + b + r| * r / ...
- 微信第三方平台定时接收component_verify_ticket
背景: 获取第三方平台令牌(component_access_token),增加了component_verify_ticket参数.component_verify_ticket由公众平台每隔10分 ...
- java并发编程(十四)同步问题的内存可见性
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另 ...
- 2016huasacm暑假集训训练五 E - What Is Your Grade?
题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/E 题意:给做出的题目个数,5个的100分,4个的前n/2的同学95,后n/2的90 ...
- GDB调试汇编分析
GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdb ...
- 一鼓作气 博客--第一篇 note1
1. 语言的类型 ,编译型(c,c++),解释型(python,php,ruby,java),编译型可移植性差,优点是运行速度快,解释型语言特点:边执行边翻译,速度慢. 2.翻译官就是机器的解释器,跟 ...
- LB 负载均衡的层次结构
作为后端应用的开发者,我们经常开发.调试.测试完我们的应用并发布到生产环境,用户就可以直接访问到我们的应用了.但对于互联网应用,在你的应用和用户之间还隔着一层低调的或厚或薄的负载均衡层软件,它们不显山 ...
- HDFS 与 GFS 的设计差异
后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的 ...