1.在React项目中使用react-redux,可以让你更方便的使用redux,原理是在index.js中注册app时用一个<Povider>标签嵌套,把你的App.js变Provideer的子组件,将所有的stateprops的形式传给<App/>

App.js

import React, { Component } from "react";
import About from "./pages/About"; //About是路由组件
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import store, { persistor } from './store/index'export default class App extends Component {render() {console.log('store', store)return (<Provider store={store}><PersistGate loading={null} persistor={persistor}><About></About></PersistGate></Provider>);}
}

2.创建store文件

createStore:创建一个 Redux store 来以存放应用中所有的 state

applyMiddleware:中间件,在redux里面就是来增强creatStore方法的

compose: 组合函数

redux-persist: 用来实现数据持久化

store/index.js

import { createStore, applyMiddleware, compose } from 'redux'
import thunk from 'redux-thunk'
import { persistStore, persistReducer } from 'redux-persist'
//  存储机制,可换localStorage, sessionStorage等,当前使用storage
import storage from 'redux-persist/lib/storage';
import rootReducer from './reducers'
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';const initState = 0
const middleware = [thunk]const persistConfig = {key: 'root', // 必须有的storage: storage, // 缓存机制stateReconciler: autoMergeLevel2 // 查看 'Merge Process' 部分的具体情况
}const persistedReducer = persistReducer(persistConfig, rootReducer)const store = createStore(persistedReducer,initState,compose(applyMiddleware(...middleware)),window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
)export const persistor = persistStore(store)export default store

4.包含n个action的type常量名称的模块 ,这里只是避免reducers和action的type中的常量不一致

constant/types.js

 export const ADD_NUM = 'ADD_NUM'export const DEL_NUM = 'DEL_NUM'

创建reducers,Reducers是真正实现state数据变化的工作

reducers/numReducer.js

import { ADD_NUM, DEL_NUM } from '../constant/types'const initState = 0const calculate = (state = initState, action) => {let payload = action.payloadswitch (action.type) {case ADD_NUM:state = payload + 1return statecase DEL_NUM:state = payload - 1return statedefault:return state}
}export default calculate

combineReducers 辅助函数的作用是,把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore

reducers/index.js

import { combineReducers } from 'redux'
import numReducer from './numReducer'export default combineReducers({ num: numReducer })

配置异步action

action/numAction.js

import { ADD_NUM, DEL_NUM } from '../constant/types'export const add = item => dispatch => {dispatch({type: ADD_NUM,payload: item})
}export const del = item => dispatch => {dispatch({type: DEL_NUM,payload: item})
}

运用到组件中

import React from 'react'
import {connect} from 'react-redux';
import {add, del} from '../../store/action/numAction';function About(props) {const { add, del, item } = propsconst test = () => { add(item) }const test1 = () => { del(item) }return (<div><h3>我是About的内容</h3><div>{item}</div><button onClick={() => test()}>增加</button><button onClick={() => test1()}>减少</button></div>)
}const mapStateToProps = (state) => {return { item: state.num }
}const mapDispatchToProps = (dispatch) => {return {add(data){ dispatch(add(data)); },del(data){ dispatch(del(data)); }}
}
export default connect(mapStateToProps, mapDispatchToProps)(About);

React-Redux使用方法相关推荐

  1. 基于 react, redux 最佳实践构建的 2048

    前段时间 React license 的问题闹的沸沸扬扬,搞得 React 社区人心惶惶,好在最终 React 团队听取了社区意见把 license 换成了 MIT.不管 React license ...

  2. React Redux 的一些基本知识点

    一.React.createClass 跟 React.Component 的区别在于后者使用了ES6的语法,用constructor构造器来构造默认的属性和状态. 1. React.createCl ...

  3. react实战项目_React实战之React+Redux实现一个天气预报小项目

    引言 经过一段时间的React学习,React和Vue的开发确实有很大的不同,但是都是MVVM框架,因此上手没有很大的难度,这次用React+Redux开发一个天气预报小项目.源码地址:https:/ ...

  4. React+Redux仿Web追书神器

    引言 由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了 ...

  5. react+redux+generation-modation脚手架搭建一个todolist

    TodoList 1. 编写actions.js 2. 分析state 试着拆分成多个reducer 3. 了解store 4. 了解redux数据流生命周期 5. 分析容器组件和展示组件 搞清楚,数 ...

  6. webpack+react+redux+es6开发模式---续

    一.前言 之前介绍了webpack+react+redux+es6开发模式 ,这个项目对于一个独立的功能节点来说是没有问题的.假如伴随着源源不断的需求,前段项目会涌现出更多的功能节点,需要独立部署运行 ...

  7. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  8. 一个 react+redux 工程实例

    在前几天的一篇文章中总结部分提到了学习过程中基础的重要性.当然,并不是不支持大家学习新的框架,这篇文章就分享一下react+redux工程实例. 一直在学习研究react.js,前前后后做了几次分享. ...

  9. 我的第一个 react redux demo

    最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...

  10. 使用React的static方法实现同构以及同构的常见问题

    代码地址请在github查看,假设有新内容.我会定时更新.也欢迎您star,issue,共同进步 1.我们服务端渲染数据从何而来 1.1 怎样写出同构的组件 服务端生成HTML结构有时候并不完好.有时 ...

最新文章

  1. html资源文件记载进度条,用进度条显示文件读取进度《 HTML5:文件 API 》
  2. 南大电子机器人入驻云南_云南大学外语协会 英文歌曲演唱比赛
  3. 百度吴甜宣布百度AI加速器第二期开营,要让创业者跑得更快
  4. 免费查找AI最优论文神器:一键出结果,分分钟提取论文表格、最新数据
  5. 3.什么叫堆排序?与快速排序有什么不同?
  6. windows 技巧篇-快捷键占用导致不能输入字母文字解决方法,解除快捷键锁死、卡死方法
  7. 华为将操作系统“装入”海尔
  8. OSPF协议概述(一)
  9. Cabloy-CMS:动静结合,解决Hexo痛点问题
  10. python抽荣耀水晶_大神代抽荣耀水晶,只需要49元,网友亲自体验,结果5分钟完成...
  11. 达观杯文本智能处理(3)
  12. webstorm激活破解
  13. 基于RFID技术的智能交通解决方案
  14. 【Love2d从青铜到王者】第二篇:Love2d详细介绍以及官网安装
  15. 最新全国手机号码归属地信息SQLite数据库2019年2月更新
  16. matlab中solve解方程,怎么用Matlab解方程?
  17. day 03-运算符学习
  18. js文件防止浏览器缓存
  19. mindspore ST调试报错 RunTimeError
  20. 001、STM32CubeMX系列教程: LL库-GPIO

热门文章

  1. 国家高新技术企业,科创板上市会更容易吗?
  2. win10系统不能复制粘贴的解决方法
  3. buuctf pwn wp(第四波)格式化字符串漏洞系列
  4. 手机内置传感器和定位技术
  5. while循环和doWhile循环
  6. Vetur自定义格式化代码
  7. 浪潮信息边缘服务器测试,浪潮信息边缘AI服务器全面支持NVIDIA EGX平台
  8. Python:利用cv2模块识别手势
  9. win2003 启用了Internet Explorer增强的安全配置
  10. VMware安装centos虚拟机