redux和react是两个独立的库,所以redux并不是非用不可,是在Flux框架的基础上改进的一个框架,所以一鸣惊人

redux的三大基本原则

  唯一的数据源(single source of truth)

  保持状态只读(state is read-only)

  数据状态只能通过纯函数来完成(change are made with pure function)

redux的基本要素和API

  store:是保存数据的容器,整个redex只有一个store(三原则之一),这个store上的状态,是一个树形的形状,每个组件都只是树形形状的一部分数据

  Action:由于react是数据驱动的,Action是view发出的通知,通知state发生变换,通过唯一的方法dispatch发出

  reducer:store收到action后,需要给出一个新的状态来更新页面,这种state的计算过程就叫做redcer

完整的一个数据流程

  1、用户通过view,发出一个action,发出的方式是用到了dispatch

  2.、store自动调用reducer,并且传入当前state和action,返回新的state

  3、state改变view随之改变

//1、第一步引入
import {reactStore} form 'redux'
//创建reducer
const reducer = {state = 0, action} => {
switch(action.type) {
case 'INCREMENT':
return state + 1;
case 'DECRMENT':
return state - 1;
defult:
return state
}
}
//2、调用reducer
const store = createStore(reducer)
const render = () => ReactDOM.render(
<Counter
value = {store.getState()}
     //4、页面变化,发出action
inIncrement = {() = > store.dispatch({type:'INCREMENT'})}
onDecrement = {() = > store.dispatch(type: 'DECRMENT')}
/>
document.getElementById('root')
)
render()
//3、监听页面变化
store.subscribe(render)

最后根据redux这一数据流程,写了一篇小故事,博君一笑

话说react国家战乱四起,view将军奉命驻守雄州,麾下名为state的军营中有五万将士,叛军来势汹汹,包围了雄州,虽说五万男儿浴血奋战,但仍寡不敌众,雄州危在旦夕,view将军沉思良久,当夜派出心腹dispatch带名为acction的虎符去并州调兵,dispatch连夜突围到达并州,并州守将reducer验明action,下令火速整军救援雄州,跟将军心腹说道,末将职责所在,不能做其他行动,只能派兵,还望见谅,dispatch说道,您是纯函数,我理解您,当即带援军回雄州,这时state中合并十万,最终大破乱军 。

哈哈哈哈哈,意淫确实很爽啊!!!

参考资料:

阮一峰redux入门教程

美图前端-redux从设计到源码

立个flag,这个周末看下redux源码,嗯,真香!

数据流管理:redux的更多相关文章

  1. 浅谈React数据流管理

    引言:为什么数据流管理如此重要?react的核心思想就是:UI=render(data),data就是我们说的数据流,render是react提供的纯函数,所以用户界面的展示完全取决于数据层.这篇文章 ...

  2. 数据流 in redux

    之前用学过的react和react-router写了个单页面应用,但写完后总感觉还欠缺点什么,怎么说呢,就是感觉在数据流的控制上被框架约束的厉害,很不自由,比如兄弟组件间的通信就很不方便.然后才了解到 ...

  3. [Big Data - Suro] Netflix开源数据流管理器Suro

    Netflix近日开源了一个叫做Suro的工具,公司可以利用它来做数据源主机到目标主机的实时定向.它不只在Netflix的数据管道上扮演重要角色,大规模下的应用场景同样令人印象深刻. Netflix各 ...

  4. 状态管理之 Flux、Redux、Vuex、MobX(概念篇)

    本文是对 Flux.Redux.Vuex.MobX 几种常用状态管理模式的总结,偏向于概念层面,不涉及过多代码. 状态管理 什么是状态管理? 状态管理就是,把组件之间需要共享的状态抽取出来,遵循特定的 ...

  5. 实例讲解react+react-router+redux

    前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...

  6. 6周学习计划,攻克JavaScript难关(React/Redux/ES6 etc.)

    作者:余博伦链接:https://zhuanlan.zhihu.com/p/23412169来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 和大家一样,最近我也看了Jo ...

  7. 基于react+react-router+redux+socket.io+koa开发一个聊天室

    最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...

  8. angular2 学习笔记 ( 状态管理 state management )

    更新 : 2017-12-29  ng5 移除 zone.js https://zhuanlan.zhihu.com/p/29577461 zone 的用途就是拦截游览器事件, 比如 click, a ...

  9. 深入理解Redux

    前面的话 Redux是Flux思想的另一种实现方式.Flux是和React同时面世的.React用来替代jQuery,Flux用来替换Backbone.js等MVC框架.在MVC的世界里,React相 ...

随机推荐

  1. win7 docker的受难记——exit status 255的终极解决

    一 我真的认识到我有很多坏习惯,而这次坏就坏在我老是用Docker Quickstart Terminal,而不直接用cmd. 毕竟Docker Quickstart Terminal看属性就是cmd ...

  2. js录制视频并保存

    使用webAPI录制视频 经测试, 只在谷歌和火狐浏览器里起效. 代码: const streamVideo = document.querySelector('.stream') const pla ...

  3. Java集合一

    java的集合类主要由两个接口派生而出:Collection && Map 这两个接口是集合框架的根接口 Collection----直接派生:Set(无序集合,元素不可重复) Lis ...

  4. 01.里氏准换与using关键字

    using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后 ...

  5. PCA (主成分分析)详解——转载 古剑寒

    转载地址:http://my.oschina.net/gujianhan/blog/225241 另外可以参考相关博文:http://blog.csdn.net/neal1991/article/de ...

  6. 使用putty远程登录Ubuntu时,报Network error:Connection refused错误

    putty远程登录Ubuntu,弹出Network error:Connection refused的错误提示框,就是因为Ubuuntu没有安装ssh服务.执行命令: sudo apt-get ins ...

  7. php执行与curl区别

            如执行一个文件写入 Linux服务器,分别php **/a.php与 curl http://**/a.php 结果:php执行写入到/root/test.txt, curl与浏览器运 ...

  8. HQL(Hibernate Query Language)

    1. NativeSQL > HQL > EJB QL(JP QL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)2 ...

  9. Tcpdump usage examples

    In most cases you will need root permission to be able to capture packets on an interface. Using tcp ...

  10. MySQL代码备份

    package com.dus.utils; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io. ...