redux超易学三篇之一(单独说redux)
redux其实非常简单。当复杂的步骤被拆分,其实每一步都是很容易的。
Github: 完整代码链接
本文在 create-react-app 中的 index.js 随便引入了一下。
(其实不必如此。测试环境支持 export/import 即可开展)
其实,redux不过就是一个数据库罢了。
action + reducer + store
行为 + 规则 + 历史/结果。
以追女孩子为例子
想寻你喜欢的女孩子。你想好了你要怎么做,你仿佛也看到了这么做的后果。 那么,你准备好开始了吗?
1.action (我们在行为中添加一个 固定的常量来命名,来诠释我们的生命)
你的每一个行为,依据规则,进行执行,从而改变了你的人生轨迹。
action 是我们定义的行为结构。由 type 和 你自己定义的数据构成的一个对象。
// 一些变量罢了。
export const MIRACLE = 'MIRACLE';
export const GROW = 'GROW';
export const PEOPLETAG = {
student: 'student',
adult: 'adult',
child: 'child'
};
// 也许你不曾创造奇迹,但,有何不可?
export const makeMiracle = (text) => {
return {
type: MIRACLE,
text
};
};
// 人类的成长行为
export const startGrow = (growType) => {
return {
type: GROW,
growType
};
};
成长 是我们生命中必定会进行的行为,时间让我们成长。
2.reducer (有时候,努力并不一定会成功,我们要顺应规则。或者,打破规则。reducer是我们的规则。)
reducer 是我们定义的一个 行为对应的规则。你的行为会给你带来什么改变?
import {GROW, MIRACLE, PEOPLETAG} from './actions';
import {makeMiracle, startGrow} from './actions';
// 人生的一开始,是一张白纸
const whitePaper = {
girlFriend: [],
miracle: [],
identity: PEOPLETAG.child
};
// 于是我们人生的旅途开始了
export const YourLife = (state = whitePaper, action) => {
switch (action.type) {
case GROW:
return Object.assign({}, state, {
identity: action.growType
});
case MIRACLE:
return Object.assign({}, state, {
miracle: [
...state.miracle,
{
text: action.text
}
]
});
default:
return state;
}
};
3.store (每个人的历史都值得被尊重。你就是你,唯一的你。)
store是 一个完善的 人生系统。它是 action 和 reducer 的实际操作。
想寻你喜欢的女孩子。你想好了你要怎么做,你仿佛也看到了这么做的后果。 那么,你准备好开始了吗?
import {createStore} from 'redux';
import {YourLife} from './reducer';
import {PEOPLETAG} from './actions';
import {makeMiracle, startGrow} from './actions';
let store = createStore(YourLife);
// 监听人生的每一次变化
const unsubscribe = store.subscribe(() => {
console.log(store.getState());
});
store.dispatch(makeMiracle('做了一个mad'));
// 人长大了
store.dispatch(startGrow(PEOPLETAG.adult));
// 停止监听
unsubscribe();
redux超易学三篇之一(单独说redux)的更多相关文章
- redux超易学三篇之二(开始使用react-redux)
其实 redux 真正让人感到混乱的还是在 react-redux 的使用中. 请配合完整代码参考~:完整源代码 也不是说混乱,主要是网上 推崇 最佳实践.学习一个新东西的时候,本来就很陌生,上来就用 ...
- redux超易学三篇之三(一个逻辑完整的react-redux)
配合源代码学习吧~ : 我是源代码 这一分支讲的是 如何完整地(不包含优化,也没有好看的页面) 搭建一个 增删改查 的 react-redux 系统 不同于上一节的 react-redux,这里主要采 ...
- javascript面向对象系列第三篇——实现继承的3种形式
× 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...
- 第三篇 Replication:事务复制-发布服务器
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...
- 第三篇 SQL Server安全主体和安全对象
本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...
- 学习KnockOut第三篇之List
学习KnockOut第三篇之List 欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来 ...
- 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境
原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...
- 第三篇——第二部分——第一文 SQL Server镜像简介
原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什 ...
- JDFS:一款分布式文件管理系统,第三篇(流式云存储)
一 前言 看了一下,距离上一篇博客的发表已经过去了4个月,时间过得好快啊.本篇博客是JDFS系列的第三篇博客,JDFS的目的是为了实现一个分布式的文件管理系统,前两篇实现了基本的上传.下载功能,但是那 ...
随机推荐
- 文件流的处理 C C++
C: 借鉴C 文件操作库函数总结 eg: #include <fstream> #include <iostream> #include <cstdio> usin ...
- 安装gdb insight(6.8.1)
如果之前安装过6.8或其它版本,请先删除以下目录 rm -rf /usr/local/insight rm -rf /usr/share/tcltk 如果之前设置过环境变量,也请删除 unset TC ...
- php扩展开发1--添加函数
目标:便携php扩展 要求实现 输出hello word 首先用的是php7.0.3 centos7.1或者centos6.+ 1.1 RPM安装PHP rpm -Uvh https://mirr ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
- Hyperledger Fabric Chaincode解析
首先看下Blockchain结构,除了header指向下一个block的hash value外,block是由一组transaction构成, Transactions --> Blocks - ...
- 关于box-sizing属性
写在前面 文中错误或不足之处欢迎指正批评,共同交流! 在项目中写css组件时遇到一个问题: 要求两个按钮均分其父元素宽度,且父元素宽度不固定,像这样: 第一反应很自然的想到使用flex布局,但是由于需 ...
- C# 随机数 Radom 循环生成同一的数字
错误:在一个循环结构中,利用下列代码生成随机数,发生生成的随机数是一样的! for (int i = 0; i < myArray.Length; i++) //给数组赋值 { Random m ...
- 第17章-Spring消息
1 异步消息简介 像RMI和Hessian/Burlap这样的远程调用机制是同步的.如图17.1所示,当客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行.即使远程方法不向客户端返回任何 ...
- 编写高质量代码改善C#程序的157个建议——建议8: 避免给枚举类型的元素提供显式的值
建议8: 避免给枚举类型的元素提供显式的值 一般情况下,没有必要给枚举类型的元素提供显式的值.创建枚举的理由之一,就是为了代替使用实际的数值.不正确地为枚举类型的元素设定显式的值,会带来意想不到的错误 ...
- android canvas中rotate()和translate()两个方法详解
rotate()和translate() 1.看到这个题目的时候,有人会觉得这不就是一个对画布的旋转和平移的嘛,但是其中的细节的地方还是需要深究一下的. 例如:有个需求将TextView的文字竖直显示 ...