Redux入门

1. 介绍

redux是js的状态管理机制,与vuex类似,不过vuex是为vue定制的。而redux并非仅仅服务于react,在jquery,angular,甚至于原生的js中都可以使用。简单来说,redux就是帮我们管理数据的。

2. 核心概念

  • state
    状态,用于维护数据的一个对象,不能直接修改

    let initialState ={person: []
    }
  • reducer
    action调用后会执行响应的reducer,reducer会执行响应操作返回数据状态 state

    const reducer = function(state=initialState,action){switch(action.type){case ADD_TO_PERSON :// 在reducer中不能直接修改state, 需要做的事值需要修改personreturn {...state,person:[...state.person,action.payload]}default :return state;}
    }
    const store = createStore(reducer);
  • action
    定义动作,获取参数,进而影响reducer的执行来改变或获取state

    function addToPerson(name,age){return {type:ADD_TO_PERSON,payload:{name,age}}
    }
    // 分发动作
    store.dispatch(addToPerson('tom',18))

3. 完整案例

下面的代码我们通过create-react-app来创建项目,然后将下面的代码插入到index.js中执行,当然如果我们在实际开发中肯定不会这么用,需要将写在特定地方,然后进行引用。

...
/* redux开始 */
//1. state数据初始状态
let initialState ={person: []
}
const ADD_TO_PERSON = 'ADD_TO_PERSON'//2. reducer,指定了应用状态的变化如何响应 actions 并发送到store的。
const reducer = function(state=initialState,action){switch(action.type){case ADD_TO_PERSON :// 在reducer中不能直接修改state, 需要做的事值需要修改personreturn {...state,person:[...state.person,action.payload]}default :return state;}
}
const store = createStore(reducer);//3. action创建函数,添加
function addToPerson(name,age){// action对象,action是将数据从应用传到store的有效载荷,是store数据的唯一来源,通过store.dispatch来调用return {type:ADD_TO_PERSON,payload:{name,age}}
}
console.log('-----',store.getState());
//4. 调用action完成person的保存
store.dispatch(addToPerson('tom',18))
console.log('-----',store.getState());/* redux结束 */
...

4. 代码整理

在具体代码实施的时会遇到大量的数据,数据多了就需要模块化来进行管理。目录结构如下

  • actions

该文件夹中定义项目中所有的动作

// index.js
import personAction from './personAction'export {personAction
}//personAction.jsimport {ADD_TO_PERSON} from '../const'export default {// action创建函数,添加addToPerson: function(name,age){// action对象,action是将数据从应用传到store的有效载荷,是store数据的唯一来源,通过store.dispatch来调用return {type:ADD_TO_PERSON,payload:{name,age}}}
}
  • reducers

该文件夹中定义项目中所有的reducers

// index.js
import { combineReducers } from 'redux';
import personReducer from './personReducer'export default  combineReducers({personReducer
});//personReducer.js
import {personInitialState} from '../state/index.js'
import {ADD_TO_PERSON} from '../const'
// reducer,指定了应用状态的变化如何响应 actions 并发送到store的。
const personReducer = function(state=personInitialState,action){switch(action.type){case ADD_TO_PERSON :// 在reducer中不能直接修改state, 需要做的事值需要修改personreturn {...state,person:[...state.person,action.payload]}default :return state;}
}export default personReducer;
  • state

该文件夹中定义项目中所有的状态

// index.js
import personInitialState from './personState'export {personInitialState
}//personState.js
export default {person: []
}
  • const.js

该文件中定义项目中所有的常量

const ADD_TO_PERSON = 'ADD_TO_PERSON'export {ADD_TO_PERSON
}
  • index.js
import {createStore} from 'redux';
import Reducer from './reducers'const store = createStore(Reducer);export default store;
  • src/index.js
// 导入react react-dom
import React from 'react';
import ReactDOM from 'react-dom';
import store from './store'
import {personAction} from './store/actions'
// 导入全局css
import './index.css';
// 导入根组件
import App from './App';
/* redux开始 */console.log(store.getState().personReducer);
store.dispatch(personAction.addToPerson('tom',12))
console.log(store.getState().personReducer);/* redux结束 */// 在root元素上渲染根组件
ReactDOM.render(<App />, document.getElementById('root'));

效果如下

React入门-9.redux你好相关推荐

  1. Flux --gt; Redux --gt; Redux React 入门 基础实例教程

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

  2. React 入门手册

    大家好,我是若川.推荐这篇可收藏的React入门手册.也推荐之前一篇类似的文章<如何使用 React 和 React Hooks 创建一个天气应用>. 点击下方卡片关注我.加个星标 Rea ...

  3. B站尚硅谷React入门教程

    视频链接:React全家桶(技术栈) 第1章:React入门 1.1. React简介 1.1.1 官网 英文官网: https://reactjs.org/ 中文官网: https://react. ...

  4. React入门看这篇就够了

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所 ...

  5. React入门指引与实战

    React是Facebook公司推出的前端组件化解决方案,目的在于解决前端开发中存在的各个痛点.目前,前端框架与库层出不穷,形成了异常繁荣的局面,那么Facebook为何还要重复造轮子呢?究其原因,F ...

  6. OpenGL从入门到精通--你好三角形

    三角形 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 绘图中需要牢记 ...

  7. React学习笔记一(React入门+JSX+脚手架)

    文章目录 1. React介绍和特点 1.1 React是什么 1.2 React的特点 2. React的开发依赖 2.1 React的三个依赖 2.2 Babel和React的关系 2.3 Rea ...

  8. React入门看这篇就够了《转载,侵删》

    react - JSX React 背景介绍 React 入门实例教程 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自 ...

  9. React入门基础教程

    React入门基础教程 React 是什么? React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript 库.使用 React 可以将一些简短.独立的代码片段组合成复杂的 UI 界 ...

最新文章

  1. 面试官问:Kafka 会不会丢消息?怎么处理的?
  2. Android Studio打包APK时出现 is not translated in en (English) [MissingTranslation]
  3. myqsl cluster error code 2310
  4. 前端学习(3083):vue+element今日头条管理-表单数据绑定
  5. 滤波器开发之二:基于算数平均的带阻平滑滤波器
  6. 通过Postfix构建Exchange Server 2010邮件网关部署系列一:创建新域环境
  7. Qt工作笔记-对QItemDelegate自定义委托的理解
  8. Gartner发布云安全能力评估报告:阿里云全球第二,超过亚马逊!
  9. 【离散期末复习】:集合论
  10. docker 安装portainer、gogs、redis、mongodb、es、rabbitmq、mysql、jenkins、harbor
  11. ListView+CheckBox两种解决方式及原因分析
  12. angularjs通信以及postmessage与iframe通信
  13. Music Bugs : 不支持wma格式的歌曲播放
  14. A network analyzer is used for
  15. 增删改查oracle sql,oracle sql增删改查
  16. Raki的PRML阅读笔记 第1章:Introduction
  17. java打开教程,jar文件打开教程
  18. 《辛雷学习方法》读书笔记——前言
  19. 所有失去的都会以另一种方式归来
  20. curl 输出接口请求响应时间

热门文章

  1. ogg 故障解决一则
  2. Linux Shell常用技巧(八)
  3. AndroidStudio Refreshing Gradle Project编译更新Gradle卡住问题
  4. 【Android】安装时, 先拷so主目录(当前设备相关),再拷so次目录,不重复拷贝 (armeabi/armeabi-v7a) arm-v7不兼容arm-v5
  5. Dalvik分析(一)
  6. Bundle/Intent传递序列化参数暗藏杀机
  7. Android模拟位置出错IllegalArgumentException: Incomplete location object, missing timestamp or accuracy?
  8. 问题一:使用AndroidDriver而非原来的AppiumDriver的原因
  9. jconsole工具监控java运行情况
  10. Hibernate----Hibernate小配置