上篇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只应用了两个功能:

  1. 列表的过滤功能,即完成、未完成、全部的选择
  2. 每一项的编辑与查看功能,即双击每一项,即可进入编辑状态

有此我们可以得出结论,state只表示一些"临时的""内部的"状态数据。

临时的,代表你可以临时改变这个数据,比如显示完成、未完成、全部的任务,这都是临时的状态,还有任务处于编辑状态或者查看状态都是临时的。

内部的,代表如果你的数据只需要在这一个组件中使用,那么你应该使用组件的内部状态。

props则正好相反,它通常存储一些方法,一些可能需要存库的长期数据和一些需要传递和共享的数据。

比如App组件中的todos代表任务数组,actions代表一些操作的方法,这些我们都存进了props中。还有Footer组件中的activeCount以及completedCount都是长期存在的数据,而且可能不止一个组件在使用。

对比Redux的全局唯一的state

我们在开发工具上查看全局唯一状态树,发现是个todos数组。对应的是长期数据(并不一定要求是长期数据)和用于在多个组件中共享的数据。

再看redux+react流程

redux和react两个搭档之间,基本只有两种联系:

  1. react从redux的state读取数据
  2. react能dispatch分发actions到redux,redux的reducer来返回一个新的state

react组件就像是个婴儿,redux就像是奶妈:

  1. 婴儿饿了,哭着要要奶喝,就是dispatch actions的过程
  2. 奶妈准备好给婴儿喂奶就是,react从redux的state读取数据的过程

结论:redux的state和react组件的state没有半毛钱关系

现在我们知道redux的state装得是全局的,长期数据(并不一定要求是长期数据)也就是对应props的数据。而react组件的state,官方建议不要放这类数据,而应该是临时的内部状态数据。所以两个state没有半毛钱关系!


教程源代码及目录

如果您觉得本博客教程帮到了您,就赏颗星吧!

https://github.com/lewis617/react-redux-tutorial

react+redux教程(二)redux的单一状态树完全替代了react的状态机?的更多相关文章

  1. React入门教程(二)

    前言 距离上次我写 React 入门教程已经快2个月了,年头年尾总是比较忙哈,在React 入门教程(一)我大概介绍了 React 的使用和一些注意事项,这次让我们来继续学习 React 一. Rea ...

  2. react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware

    今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...

  3. Redux 学习(1) ----- Redux介绍

    Redux 有三个基本的原则: 1,单一状态树,redux 只使用一个javascript 对象来保存整个应用的状态. 状态树样式如下: const state = { count: 0 } 2,状态 ...

  4. react开发教程(六)React与DOM

    ReactDOM findeDOMNode 语法:DOMElement findDOMNode(ReactComponent component)描述:获取改组件实例相对应的DOM节点 案例: imp ...

  5. 【前端,干货】react and redux教程学习实践(二)。

    前言 这篇博文接 [前端]react and redux教程学习实践,浅显易懂的实践学习方法. ,上一篇简略的做了一个redux的初级demo,今天深入的学习了一些新的.有用的,可以在生产项目中使用的 ...

  6. react+redux教程(五)异步、单一state树结构、componentWillReceiveProps

    今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...

  7. react+redux教程(四)undo、devtools、router

    上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...

  8. Redux教程2:链接React

    通过前面的教程,我们有了简单的环境,并且可以运行Redux的程序,也对 如何编写Redux示例 有了初步的印象: 掌握了 使用Redux控制状态转移 ,继而驱动 React 组件发生改变,这才是学习R ...

  9. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

随机推荐

  1. HTML5

    一.头部设置 <!--页面窗口自动调整到设备宽度,并禁止用户及缩放页面--> <meta name="viewport" content="width= ...

  2. java.net.ConnectException: Connection timed out

    原因可能如下: (1)生成的WSDL的IP地址是不是服务器的IP: (2)代码中是否需要代理,若否,取消代理,若是,设置代理:

  3. Jquery学习插件之手风琴

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 华为oj 字符串最后一个单词的长度

    <img alt="http://img.bbs.csdn.net/upload/201508/06/1438867109_670158.jpg" src="htt ...

  5. Unity - Apk包的代码与资源提取

    最近在研究如何给Unity游戏进行加密,让别人不能轻易破解你的apk包,不过网上的加密方法都是有对应的破解方法~_~!!结果加密方法没找到好的,逆向工程倒会了不少.今天就来讲解如何提取一个没做任何保护 ...

  6. angularjs provider 供应商服务

    今天学习了angularjs的provider的供应商服务,写了个例子(自定义供应商服务,也可使用angularjs内部提供的服务) var starterApp = angular.module(' ...

  7. sql SYS对象集合

    select * from SYS.objects select * from SYS.all_objects select * from SYS.tables select * from SYS.c ...

  8. Ubuntu安装Gnome3

    参考:How To Install GNOME In Ubuntu 14.04 . Ubuntu11.10安装GNOME3,卸载UNITY和UNITY2D操作 和How to install Gnom ...

  9. Windows系统上的.Net版本和.NETFramework的C#版本

    前言 注:本文内容摘自维基百科,用于在墙内时当作笔记看. WinForm 需要.Net最低版本 2.0 WPF需要的.Net最低版本 3.0 (Win7及之上版本自带) C#版本 版本 语言规格 日期 ...

  10. Windows Azure 服务总线和物联网

    机器到机器 (M2M) 计算正迅速成为一种技术,所有开发人员和架构师需要拥抱. 许多研究表明一个未来世界的数百亿美元的设备 (在地球上的每一个人的出现).MSDN杂志有2篇文章讨论Azure服务总线和 ...