Redux

是负责组织 state 的工具!
也叫状态管理工具 ,同类的还有 ( flux, mobx)!
所有的 state 都以一个对象树的形式储存在一个单一的 store 中。
惟一改变 state 的办法是触发 action,一个描述发生什么的对象。
为了描述 action 如何改变 state 树,你需要编写 reducers。

三个原则
1) store是唯一的
2) state 是只读的
3) 通过纯函数reducer 能够对状态进行修改

把要做的修改变成一个普通对象,这个对象被叫做 action,而不是直接修改 state。然后编写专门的函数来决定每个 action 如何改变应用的 state,这个函数被叫做 reducer。

Redux 只有一个单一的 store 和一个根级的 reduce 函数(reducer)。随着应用不断变大,你应该把根级的 reducer 拆成多个小的 reducers,分别独立地操作 state 树的不同部分。

分模块
var reducer = combineReducers({ 返回的reducer 是总的reducer
模块的名字: 引入的reducer
})

//分模块以后
store.getState().模块的名字.变量

使用步骤

  1. 引入 createStore import {createStore} from ‘redux’;

  2. 设置初始数据
    initState ={ key:value}

  3. 传给reducer
    reducer(state=initState,action) 纯函数

  4. createStore(reducer);

  5. 导出 export default store

  6. store.getState().state中的变量

修改数据

1) store.dispatch(动作)
action 是一定含有type的一个对象 ,
2) 动作发给了 reducer 第二个参数 action
action 一定有type ,还可能接收一些其他参数
3) 根据type修改数据
a. 做 state 的复本
b. 修改state的复本对象
c. 返回新的state
2) store
store getState dispatch({type:‘XXX’,key:value…})
3) action对象的type值 千万不要重复

store
1)getState() 获取状态
2) dispatch({type,playload}) 抛发动作给reducer
3) subscribe 监听store里的数据变化

修改

组件里 store.dispatch(action(actionCreator)) ---->
reducer(type,action) —>
复制副本,修改,返回–>
组件里通过store.getState() 取最新的值(subscribe)

React-Redux

react-radux就是将所有组件分成两大类:
UI 组件(presentational component)和容器组件(container component),以便于更好的优化和管理代码。

UI组件

我的理解是,它就是单纯的对页面的渲染,不负责逻辑的运行,无状态,并且通过父级的props拿到数据state

容器组件

它用来写业务逻辑各方面的数据管理,不负责进行对页面的渲染

在react-redux中容器组件是react-redux自动生成的,而使用者只需要编写UI组件即可

Provider

它是react-redux 提供的一个 React 组件。用来接收store中的state,并且作为props通过context对象传递给子组件。
用法:
在根组件外层包裹
这样就可以使整个项目的组件成为Provider 的子组件,并通过props获取数据。

或者加入路由:

connect

高阶组件 连接容器组件和ui组件
connect方法接受两个参数:mapState和mapDispatch。它们定义了 UI 组件的业务逻辑。

mapState

映射的时候,可以做计算的值的映射

mapDispatch =(dispatch)=>bindActionCreators(actionCreator,dispatch);

相当于直接写 actionCreator

异步操作
redux-thunk
a) yarn add redux-thunk
b) applyMiddleware
c)createStore(reducer,applyMiddleware(thunk));
4) actionCreator里面,,
方法要返回 回到函数,参数就是 dispatch

 return (dispatch)=>{异步的动作 成功后再异步动作回调里 使用dispatch发出动作给reducer}

逆战1913React-redux学习心得相关推荐

  1. react项目中的参数解构_一天入门React学习心得

    一天入门React学习心得 阅读前必读 本文写的仓促,算是一个学习笔记吧,算是一个入门级的学习文章.如果你刚刚入门,那么可能一些入门的视频可能更加适合你.但如果具备一些知识,比如Vue,那么视频就不适 ...

  2. 前端和后端的英文_80后老阿姨转行做前端的学习心得,深情交流!

    一.Why choose front-end 2012.07毕业后,进了一家游戏公司做运营策划,写过营销方案.做过内容编辑.知道广告投放和换量,还得兼职产品经理画原型. 每天9.30-23.00以后, ...

  3. 80后老阿姨转行做前端的学习心得,深情交流!

    一.Why choose front-end 2012.07毕业后,进了一家游戏公司做运营策划,写过营销方案.做过内容编辑.知道广告投放和换量,还得兼职产品经理画原型. 每天9.30-23.00以后, ...

  4. 转行做前端的学习心得,深情交流

    一.Why choose front-end 2015.07毕业后,进了一家游戏公司做运营策划,写过营销方案.做过内容编辑.知道广告投放和换量,还得兼职产品经理画原型. 每天9.30-23.00以后, ...

  5. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  6. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  7. 对于mysql存储过程感想_存储过程学习心得

    存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...

  8. 好程序员Web前端教程分享Vue学习心得

    为什么80%的码农都做不了架构师?>>>    好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...

  9. 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...

    关于计算机网络辅助大学英语教学的思考学习心得 [摘要]计算机网络辅助教学可以增强学生的学习兴趣,提高他们自觉学习的能力,因而得到了大多数学生的认可,取得了比较显著的成效.计算机网络辅助教学也对大学英语 ...

  10. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

最新文章

  1. maven的setting.xml文件配置信息【仅仅更改了一处】
  2. 研究生数学建模比赛日程安排
  3. 【转载】SharpDevelop代码分析
  4. eveningplan
  5. 两数之和(Leetcode第1题)
  6. 诗与远方:无题(十九)
  7. java B2B2C Springcloud多租户电子商城系统- Gateway 之Predict篇...
  8. jdbc与java数据库编程_JDBC与JAVA数据库编程
  9. 本页不但包含安全的内容,也包含不安全的内容
  10. c语言中double占多少字节,double占几个字节?
  11. keil5破解失败【经验分享】
  12. 5种常用的相关分析方法
  13. 【入门】R语言最详细Windows安装指南
  14. CHM 格式打开不显示网页
  15. 超简单看懂匈牙利算法
  16. NVIDIA TX2 使能CAN模块
  17. C语言 指针的解引用详解
  18. vue中如何使用节流(throttle)函数
  19. javaScript 美化radio
  20. 不规则四边形的平行四边形化

热门文章

  1. 微信小程序原生开发流程 - 00
  2. 2022年最新河北建筑八大员(质量员)模拟考试题库及答案解析
  3. 梦幻西游手游什么服务器稳定,梦幻西游手游服务器成就并没那么难
  4. 《塞尔达:梅祖拉的假面》追逐时间的游戏
  5. 过目不忘的读书法--[日]桦泽紫苑
  6. ekf估计电池soc过程推导(一)状态方程列写及离散化
  7. Vue + Spring Boot 项目实战(七):导航栏与图书页面设计
  8. day06-元组字典集合常用两种排序
  9. 面向对象:类与对象的近一步研究
  10. 超实用的Python五大脚本,减少垃圾软件负担