一、概念:             http://caibaojian.com/react/redux-basic.html   或  https://www.cnblogs.com/maopixin/p/9989236.html  或  https://www.jianshu.com/p/7a867be0594a(推荐)

  1、redux 是独立于react的,其他的框架也是可以使用的。

二、安装 redux模块:

npm install --save redux react-redux redux-thunk
npm install --save-dev redux-logger

  说明: redux 和 react-redux 是必须的 redux-thunk可以帮你实现异步action。redux-logger可以实现监测redux的变化,

  Redux

    状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux

  react-redux

    React插件,作用:方便在React项目中使用Redux。(react-redux 和 redux 有版本兼容性的问题。测试有效的版本 redux@4.0.1、react-redux@5.0.7、redux-thunk@2.3.0)

  react-thunk

    中间件,作用:支持异步action

三、使用:单纯 使用 redux,不使用  react-redux,等其他的模块。   https://blog.csdn.net/weixin_43221330/article/details/88356640(只有写了 读取redux的数据) 或  https://www.cnblogs.com/yuyujuan/p/11355057.html(推荐,包括读取和修改redux的数据)

  1、创建 store 库:
import { createStore } from 'redux';
import reducers from './reducers.js' // reducers 是一个函数,返回一个最新的 state。调用这个函数时,会传入 两个参数:state和action。其中state指的是原仓库的状态, action指的是新传递的状态 const store = createStore(reducers); // 程序调用dispatch方法,就会触发 reducers 函数,修改state值。 创建时就会调用 reducers 函数。
export default store;

  2、创建reducer:  调用 store 的 dispatch方法,就会触发 reducers 函数,修改state值。 创建时就会调用 reducers 函数。

   页面调用 dispatch 方法,怎么赋值给 store 的 state,自己可以在 reducers 函数中自由发挥。

const defaultState  = {
inputValue: 'fine'
//默认state数据
} export default (state = defaultState , action)=>{
switch (action.type){
case 'inputValue':
state.inputValue = action.value
break;
default:
break;
}
return state;
}

  3、组件获得store中的数据 :

this.state = store.getState();

  4、组件 改变 store 中的数据(action):

     注意:action 必须是一个对象,且有一个 type 字段。

        const action = {
type:'inputValue',
value:'1234567'
}
setTimeout(() => {
store.dispatch(action)
},10000)

  5、store 数据更新了,需要在 组件的constructor 生命周期中订阅redux的状态 ,才能同步更新。(订阅的API方法  subscribe)

    constructor(props){
this.state = store.getState();
store.subscribe(this.change); change是一个函数,当store改变,就会订阅发布,执行 subscribe 内的 函数。在 change 函数里面,在修改本地的 state ,更新视图
}

  6、上面知道怎么用,现在 可以看下 redux 的设计原理了:        https://www.jianshu.com/p/e984206553c2

四、Redux + React-Redux 的使用:  https://www.jianshu.com/p/ad7eddb23d66(最后的 简单计数器的代码有效)  或 https://www.php.cn/js-tutorial-403709.html(推荐,把入口文件,和 页面组件分开的)
   1、<Provider> 组件:   能够使 里面的 组件都能 访问到Redux store中的数据。【根组件外面包了一层Provider组件,所有子组件就都可以拿到 store中的数据了。】
    注意:当前组件中使用 <Provider> ,使用store数据是无效的。<Provider> 必须是在 使用store 组件的父级组件上使用。所以这个一般是放在跟组件上的。
   2、connect():connect方法使你可以从Redux store中读取数据(以及当store更新后,重新读取数据)。如:
//  将state映射到Counter组件的props
function mapStateToProps(state) { // connect 第一个函数参数会把 store 的 state 作为参数传入,方便这个函数内 获取 state 中 的数据,映射到当前组件的props中。方便组件 通过 props 获取 store的数据。
return {
value: state.count
}
} // 将action映射到Counter组件的props
function mapDispatchToProps(dispatch) { // connect 第二个函数参数会把 store 的 dispatch 作为参数传入,方便这个函数内 获取 store的dispatch方法 ,映射到当前组件的props中。方便组件通过props的方法修改 store 的数据。
return {
onIncreaseClick: () => dispatch(increaseAction)
}
} // 传入上面两个函数参数,将Counter组件变为App组件。 Counter组件 拷贝一份,通过 mapStateToProps、mapDispatchToProps函数,给 拷贝的组件传入 props 属性 和方法。【这里是给组件的props传入了 props.value 属性 和 props.onIncreaseClick 方法 】
const App = connect(
mapStateToProps,
mapDispatchToProps
)(Counter)
     思考:组件使用connect 就相当于在 父 子组件间加了一层 功能组件。不用store的组件,可以不用加这一层功能组件(即不用 connect 处理这个组件)。
   3、mapStateToProps(state):建立一个从(外部的)state对象到(UI 组件的)props对象的映射关系。
   4、mapDispatchToProps(dispatch):建立 UI 组件的参数到store.dispatch方法的映射。      这里 函数内的dispatch 每执行一次,就会触发 mapStateToProps 函数 执行,从而引起 组件的 更新。
 
 
五、 
 

dva:    https://dvajs.com/guide/  (在使用  antd pro 框架开发后管系统时,里面带了dva。所以这里介绍下)

 一、概念:
  1、dva 首先是一个基于 redux 和 redux-saga 的数据流方案
 
二、使用介绍: (这里,只是 介绍下 ,在项目中 碰到的 APi ,其它的不讲解)
  1、connect 方法: connect 是一个函数,绑定 State 到 View。
  2、dispatch 方法:dispatch 是一个函数方法,用来将 Action 发送给 State。
            被 connect 的 Component 会自动在 props 中拥有 dispatch 方法。
  3、Reducer:是 Action 处理器,用来处理同步操作,可以看做是 state 的计算器。(这个和原生 redux 中的reducer 功能类似)
  4、Effect:    是 Action 处理器,处理异步动作,基于 Redux-saga 实现。

react教程 — redux的更多相关文章

  1. 【前端】react and redux教程学习实践,浅显易懂的实践学习方法。

    前言 前几天,我在博文[前端]一步一步使用webpack+react+scss脚手架重构项目 中搭建了一个react开发环境.然而在实际的开发过程中,或者是在对源码的理解中,感受到react中用的最多 ...

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

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

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

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

  4. React 与 Redux 在生产环境中的实践总结

    React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...

  5. React、Redux 和 Bootstrap

    使用 React.Redux 和 Bootstrap 实现 Alert 今天,我们来学习使用 React.Redux 和 Bootstrap 实现Alert. 例子 这个例子实现了弹出不同类型信息的功 ...

  6. react native redux 草稿

    Provider > Provider > 使组件层级中的 方法都能够获得 Redux store.正常情况下,你的根组件应该嵌套在 Provider 中才能使用 方法. 如果你真的不想把 ...

  7. 基于 React.js + Redux + Bootstrap 的 Ruby China 示例 (转)

    一直学 REACT + METEOR 但路由部分有点问题,参考一下:基于 React.js + Redux + Bootstrap 的 Ruby China 示例 http://react-china ...

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

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

  9. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

随机推荐

  1. CSS学习笔记1:字体样式属性

    CSS初识 成叠样式表,主要用于设置html页面的外观 产生原因:为了解决混乱的结构和样式,使结构和样式相分离. CSS注释 /*这是CSS注释*/ CSS样式规则 1.选择器用于指定css样式作用的 ...

  2. Arrays -数组工具类,数组转化字符串,数组排序等

    package cn.learn.basic; import java.util.Arrays; /* java.util.Arrays是一个与数组相关的工具类,含有大量静态方法,用来实现数组常见的操 ...

  3. Deepin 下开启SSH远程登陆

    关于deepin下安装ssh以后root用户登陆报错的解决   最近刚刚接触到deepin,觉得,wow,除了mac,还有这么好看的非win系统,而且第测出那个Linux,宽容度很高,非常适合我这种比 ...

  4. Stream的排序

    1.list<Integer>的正序 List<Integer> list = new ArrayList<>();list.add(50);list.add(45 ...

  5. mysql 主从复制(mysql双机热备的实现)

    转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...

  6. UML类图及类之间关系

    1.UML基本介绍 UML:统一建模语言,是一种用于软件系统分析和设计的语言工具 2.UML图 UML图分类: 用例图 静态结构图:类图,对象图,包图,组件图,部署图 动态行为图:交互图,状态图,活动 ...

  7. Python入门习题1.温度转换

    这一节的课堂例题为: 例1.编写一个Python程序,完成摄氏度到华氏度,华氏度到摄氏度的温度转换. 解: (1)分析问题:利用程序实现温度转换,由用户输入温度值,程序给出输出结果. (2)划分边界: ...

  8. P4158[SCOI2009]粉刷匠

    题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...

  9. Centos6.5 使用YUM安装MariaDB

    1,第一步 [xxxxxx]$ cd /etc/yum.repos.d [xxxxxx]$ vi MariaDB.repo # MariaDB 10.0 CentOS repository list ...

  10. Js数据去重复,时间更换格式,cookie,localStorage和sessionStorage的使用等通用方法

    一,数组去重复 function unique(arr) { // 遍历arr,把元素分别放入tmp数组(不存在才放) var tmp = new Array(); for (var i in arr ...