react教程 — redux
一、概念: 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的数据)
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
1、<Provider> 组件: 能够使 里面的 组件都能 访问到
Redux store
中的数据。【根组件外面包了一层Provider组件,所有子组件就都可以拿到 store
中的数据了。】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)
dva: https://dvajs.com/guide/ (在使用 antd pro 框架开发后管系统时,里面带了dva。所以这里介绍下)
react教程 — redux的更多相关文章
- 【前端】react and redux教程学习实践,浅显易懂的实践学习方法。
前言 前几天,我在博文[前端]一步一步使用webpack+react+scss脚手架重构项目 中搭建了一个react开发环境.然而在实际的开发过程中,或者是在对源码的理解中,感受到react中用的最多 ...
- 【前端,干货】react and redux教程学习实践(二)。
前言 这篇博文接 [前端]react and redux教程学习实践,浅显易懂的实践学习方法. ,上一篇简略的做了一个redux的初级demo,今天深入的学习了一些新的.有用的,可以在生产项目中使用的 ...
- 实例讲解react+react-router+redux
前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...
- React 与 Redux 在生产环境中的实践总结
React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...
- React、Redux 和 Bootstrap
使用 React.Redux 和 Bootstrap 实现 Alert 今天,我们来学习使用 React.Redux 和 Bootstrap 实现Alert. 例子 这个例子实现了弹出不同类型信息的功 ...
- react native redux 草稿
Provider > Provider > 使组件层级中的 方法都能够获得 Redux store.正常情况下,你的根组件应该嵌套在 Provider 中才能使用 方法. 如果你真的不想把 ...
- 基于 React.js + Redux + Bootstrap 的 Ruby China 示例 (转)
一直学 REACT + METEOR 但路由部分有点问题,参考一下:基于 React.js + Redux + Bootstrap 的 Ruby China 示例 http://react-china ...
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...
- 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)
请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...
随机推荐
- UI自动化之cookies登录
现在有很多网站有验证码,跳过验证码实现登录可以使用cookies登录 目录 1.webdriver的添加cookies的方法 2.举个栗子 1.webdriver的添加cookies的方法 webdr ...
- xenserver添加静态路由
xe network-list name-label= xe network-param-set uuid=48a64512-69e8-6534-f276-8d0c4555f946 other-con ...
- Decision Tree Algorithm
Decision Tree算法的思路是,将原始问题不断递归地细分为子问题,直到子问题直接可获得答案为止.在模型训练的过程中,根据训练集去做树的生长(Grow the tree),生长所有可能的Bran ...
- JS验证数字
//1.验证数字 var reg = new RegExp("^[0-9]*$"); //var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+ ...
- 无法启动Sql Server服务
本文首发地址为hilsion的博客 今天遇到一个无法启动SQL Server服务的问题,具体报错如下: 根据错误提示,去到WINDOWS的事件查看器.在WIN10上,右击右下角的菜单图标: 然后依次点 ...
- 使用pycharm调试远程服务器上的程序
一.PyCharm实现远程调试代码 1. 和远程服务器建立连接,tools àDeploymentàConfiguration 2. 点击“+”号,按照远程服务器信息配置信息 点击“Advanced ...
- centos7系统乱码问题解决
操作步骤: 查看当前系统的默认语言 echo $LANG 查看系统支持的语言库 locale 如果没有要设置的语言需要安装一下 yum groupinstall chinese-support -y ...
- MySQL基础(创建库,创建表,添加数据)
CREATE DATABASE 数据库名; CREATE TABLE student2(sno VARCHAR(20) NOT NULL PRIMARY KEY COMMENT"学号&quo ...
- ubuntu下修改子网掩码
1.修改网络配置 修改 /etc/netplan/01-network-manager-all.yaml 文件 vi /etc/netplan/01-network-manager-all.yaml ...
- python------模块和包及异常处理
一.模块 所有的模块导入都应该尽量往上写,且顺序为: a:内置模块 b:扩展模块 c:自定义模块 #my_module.py print('from the my_module.py') money= ...