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. sqlserver2008 调试存储过程

    1.创建所需要调试的存储过程,并执行一下,也就是保存好 ,我要演示的存储过程名是 “usp_Passport_GetNewDepositary” 2.找到存储过程,右键“执行存储过程”,会弹出如下的界 ...

  2. 调用sqlserver中的存储过程

    1.存储过程名 string strSQL = "usp_GetUnReturnPassports"; 2.创建数据库对象 database Database db = Datab ...

  3. [转]Asp.net MVC中的ViewData与ViewBag

    本文转自:http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html 在Asp.net MVC 3 web应用程序中,我们会用到V ...

  4. 引用SQLHelper类configurationmanager 不存在

    在使用Sqlhelper类时,出现cs0103错误 当前上下文中不存在名称configurationmanager 解决方案,除了using引用using System.Configuration外, ...

  5. Javaweb的get请求乱码解决

    get方式请求:即将参数放在URL中,因此这就涉及到URL的编码了 方式一:[推荐] 方式二: 前端编码: encodeURI(encodeURI("")) 后端解码: java. ...

  6. DataRow获取数值类型为空或NULL时异常处理

    //获取数据集内容 DataSet ContractDS = dal.GetJHFKStr(jhfubh); //验证数据集是否为空 if (!DataSetUtil.IsNullOrEmpty(Co ...

  7. 利用ajax短轮询+php与服务器交互制作简易即时聊天网站

    主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 本文主要介绍ajax短轮询的简易实现方式. 看懂此文 ...

  8. redux基本使用

    redux数据流向 基本使用

  9. ZROJ#398. 【18提高7】随机游走(期望dp 树形dp)

    题意 [题目链接]版权原因就不发了.. 给出一棵树,求出任意两点之间期望距离的最大值 Sol 比较清真的一道题吧.. 设\(f[x]\)表示从\(x\)走到\(x\)的父亲的期望步数 \(g[x]\) ...

  10. drupal node机制理解

    [1]根据结构的功能结构的不同,drupal划分为,node,user,comment等不同的结构,他们的结构是不同的.他们可以作为四个不同的抽象类,根据这个抽象类,分别有一套hook函数去控制实现的 ...