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. nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开

    讲解康托展开与逆康托展开.http://wenku.baidu.com/view/55ebccee4afe04a1b071deaf.html #include<bits/stdc++.h> ...

  2. [转] 微信小程序 页面跳转 传递参数

    本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...

  3. 关于supersocker的数据传输中遇到的问题

    最近在学socket,在使用socket时数据的传输与接口都是byte,所以文本与文件的传输只要对传过来的byte处理好就可以. 但是在supersocket上,我却花费了很长的时间.原因如下: 1. ...

  4. 监控节点 xml写入数据库 存储过程

    USE [Appserver] GO /****** Object:  StoredProcedure [AppServer].[ImportNodeRelationData]    Script D ...

  5. 使用IDEA创建java项目(hello word)

    前提:已安装好jdk,配置好环境变量.我使用的是java 8. 首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject: 1,第一步打开idea 第二步选择创建ja ...

  6. 基于Ajax与用户认证系统的登录验证

    一.登录页面 from django.contrib import admin from django.urls import path from blog import views urlpatte ...

  7. CSS中关于linebox的baseline位置移动的理解

    前言 最近看到一篇文章,弗里得木的翻译笔记,里面有个问题没有解决,就是linebox的baseline为什么会移动呢? 在讨论这个问题之前读者需要对 默认值baseline 以及 其他属性值(天镶的博 ...

  8. 常见HTTP状态200,304,403,404,503

    下面提供 HTTP 状态码的完整列表.您也可以查看 W3C官方HTTP 状态码说明(英文). 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求 ...

  9. PowerDesigner 连接数据库(以MySQL)为例

  10. 关于String s = new String("xyz");创建了几个字符串对象?的问题

    引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 首先让我们了解几个概念: 栈:由JVM分配区域,用于保存线程执行的动作和数据引 ...