Redux-学习笔记

redux-cpp:C ++应用程序的可预测状态容器 Redux-cpp 库的C ++实现 安装 所有Redux-cpp源代码都包含在一个标头中。 安装Redux-cpp的最简单方法是将其放入项目中。 可以使用轻松编译示例和单元测试。 除标准库外,该存储库没有任何依赖项。 要旨 Redux-cpp中的实现: # include " redux.hpp " # include < iostream> enum Action { INCREMENT, DECREMENT }; int reducer ( int state, Action action) { switch (action) { case INCREMENT: return state + 1 ; case DECREMENT: return state - 1 ; default : return state; } } void log 立即下载

Redux-学习笔记

安装Redux

redux需要安装以下依赖:

cnpm install redux --save
cnpm install react-redux --save
cnpm install redux-actions --save

@connect装饰器报错处理
因为用到了es6/7的语法,需要安装babel转码

npm run eject      //解除封装
cnpm install babel-plugin-transform-decorators-legacy  --save-dev
cnpm install  @babel/plugin-proposal-decorators --save-dev

在package.json中添加插件支持ES7:
在这里插入图片描述

  "babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      ["@babel/plugin-proposal-decorators",{"legacy": true}]
    ]
  },

Redux简介(为什么要用Redux?)

先来看看React里面的数据是怎样传递的(下图中并不是说this.state只能在“团长”处,这里只是为了简便,所以才这样写,其实营长,连长都可以有自己的this.state):
React数据流:
在这里插入图片描述

  1. 可以看到,一般都是团长等高级干部商量好对策之后(this.state设置好)
  2. 把命令一层层的传递下去执行(this.props渲染)
  3. 要是哪里发生了什么新的敌情了(想更新页面内容了)
  4. 就得一层层往上报告(通过回调一层层把数据传上去),此过程也必须一层层往上传递,不能越级,下面有解释
  5. 团长做出决断后再发布命令传下去执行(通过setState修改数据并重新渲染)

这个过程是不能越级的,比如说你一连长发现了敌情就不能直接报告团长,而必须先报告给一营长,一营长再报告给团长,这里层级还不是特别深,你再来个排长,班长什么的,按照这种模式,等团长知道敌情,敌人都打到家门口啦,又或者说一连长想找三连长喝个酒,还得先把这个消息传给营长,再传给团长,再传给二营长再传给三连长,这……

Redux横空出世
所以说层级不深,组价之间也没有什么公用数据的时候,用React自身的setState其实也可以了,可是嵌套一深,或者组件有一些公用数据时就比较麻烦了,于是就有了redux(其实之前还有个flux),回到这个例子就是,他们在整个团之外又建立了一个通讯班(Redux):
看起来就像下面这样:
在这里插入图片描述
这里只是一个很简单的示意图,实际使用并非如此,这个图示为了让大家理解React中的数据和Redux中的数据是独立的,并没有任何关系。
Redux
现在让我们抛开战斗编制(React),单看通讯班(Redux)。
其实网上讲Redux的教程非常多,这里就简单说一下:
store
store:首先要创建一个对象store,这个对象有各种方法,用来让外界获取Redux的数据(store.getState),或者让外界来修改Redux中的数据(store.dispatch)

import { createStore } from 'redux';
const store = createStore(reducer);

action:描述我要干啥,一般是一个对象的形式,其中有一个type字段是必须要有的,比如:{ type:‘请求增援’ },还可以带点数据{ type:‘请求增援’,gun:"100" }

reducer
reducer:撸开袖子真刀实枪的就去干了,比如一连长要求增援,增援要求是100杆枪,团长马上就给你加了100杆枪送了过去。

const defaultState = 0;
const reducer = (state = defaultState, action) => {
  switch (action.type) {
    case '请求增援':
      return state + action.gun;
    default: 
      return state;
  }
};

action和reducer也可以想象成产品经理和程序员的关系。
产品经理:“我要一个按钮,圆角的”
程序员:“嗯,做好了”
产品经理:“换个颜色吧,红色”
程序员:“ok,换好了”
差不多就是这样,产品经理并不操心具体怎么实现的,他只说他想要干什么(type),然后再提点实现的要求(各种其他的数据),程序员就去具体实现(reducer,修改state,然后返回一个全新的state,这里注意我们并没有直接返回原来的state,我们返回的是一个全新的state对象,因为reducer函数是一个没有副作用的纯函数)

那怎么去触发这个操作(action)呢,就好比说我一连长发现敌情了,我怎么报告给通讯班,让通讯班来处理呢?

就是上面提到过的store.dispatch,不过还要加一个参数,那就是action

store.dispatch({ type:‘请求增援’,gun:"100" })

这样就可以触发action,执行reducer,得到一个全新的state。
小例子:

<!DOCTYPE html>
<html>
  <head>
    <title>REDUX</title>
    <script src="https://unpkg.com/redux@latest/dist/redux.min.js"></script>
  </head>
  <body>
    <div>
      <p>
        Clicked: <span id="value">0</span> times
        <button id="add">+</button>
        <button id="del">-</button>
      </p>
    </div>
    <script>
    window.onload = function(){
      const action = ()=>{
        return {
          type:'DEL'
        }
      }
      const reducer = (state = 0, action) => {  //reducer
        switch (action.type) {
          case 'ADD':
            return state + 1;
          case 'DEL':
            return state -1
        }
      };
      const store =Redux.createStore(reducer);   //创建store对象

      document.getElementById("add").onclick= function(){
        store.dispatch({ type:'ADD' })    //触发action
      };
      document.getElementById("del").onclick= function(){
        store.dispatch(action())    //触发action
      };
      function render(){
        document.getElementById("value").innerHTML = store.getState();  //获取store中的state
      }
      store.subscribe(render)  //监听state变化执行render
    }
     </script>
  </body>
</html>

Redux和React

到此为止,Redux自己就折腾完了,那么Redux自己的数据并没有用,它要把数据交给React用才行,接下来讲一讲怎么把数据交给React来用。
上面我们创建了一个对象store,我们要把这个store对象作为props传给React,那React就可以用了。
这个store只能有一个,也就只能创建一次,也就是说你必须在最顶层处创建一个store对象,然后再一层层的传递下去,才能让所有的组件都能获得这个store对象,调用它的方法。

获取Redux中的数据
比如说我要在render函数中显示Redux的数据,那么我就可以先获取它的数据:

store.getState()

然后把这个数据当做props渲染到组件中去就行了。

更新Redux中的数据
如果你要修改它的数据,那就在JSX中调用

store.dispatch( { type:‘请求增援’,gun:"100" } )

响应Redux中的变化
那么这里问题又来了,你调用了store.dispatch之后Redux中的数据确实改变了,可是React并没有什么变化啊。也就是说React中的render函数并没有被触发呀是不是,就好像React中你直接修改React中的state是没有用的而必须调用React的setState才能重新渲染。
因此,为了让Redux的数据一改变我们就重新渲染,Redux自己提供了一个方法叫做

store.subscribe(render)

这个函数可以监听Redux中state的变化,一旦Redux中的state发生了变化,render函数就会被调用,页面就会被重新渲染。

上面这个过程就是手动调用的过程,但这样调用有点麻烦,因为要让所有的子组件都能应用store中的数据,那么所有的组件就都要把store当做props传进来,这也太麻烦了。
还是那之前那个例子来说,你一连长发现了敌情,是不用层层上报了,可以直接报告给通讯班,通讯班再生成新的命令,可问题是,你从下往上打报告是简单了,可是从上往下发布命令仍然是一层层的传递的呀。
就好比说,一连长发现了敌情,报告上去,通讯班做出决定让三连长带人去打,通讯班还是得通过团长–营长–连长这条路去一层层发布命令,能不能让通讯班直接就通知三连长呢,当然是有的,这就是我们的React-redux库

React-redux

这个是需要你自己去用npm额外安装的。
使用这个方法之后,我们就不需要一层层往下发布命令了
在React-redux中有两个比较关键的概念:Provider和connect方法。
一般我们都将顶层组件包裹在Provider组件之中,这样的话,所有组件就都可以在react-redux的控制之下了,但是store必须作为参数放到Provider组件中去

<Provider store = {store}>
    <团长/>
<Provider>

这个组件的目的是让所有组件都能够访问到Redux中的数据。

redux-actions使用

redux-actions有两大法宝createAction和handleActions
createAction
原来创建action:

const startAction = () => ({ type: START });

使用redux-actions创建action:

import { createAction } from 'redux-actions';
const startAction = createAction(START);

handleActions
原来reducer操作state写法要使用switch或if else来匹配:

function timer(state = defaultState, action) {
  switch (action.type) {
    case START:
      return { ...state, runStatus: true };
    case STOP:
      return { ...state, runStatus: false };
    case RESET:
      return { ...state, seconds: 0 };
    case RUN_TIMER:
      return { ...state, seconds: state.seconds + 1 };
    default:
      return state;
  }
}

使用redux-actions``reducer操作state:

const timer = handleActions({
  START: (state, action) => ({ ...state, runStatus: true }),
  STOP: (state, action) => ({ ...state, runStatus: false }),
  RESET: (state, action) => ({ ...state, seconds: 0 }),
  RUN_TIMER: (state, action) => ({ ...state, seconds: state.seconds + 1 }),
}, defaultState);

项目打包

npm run build
在这里插入图片描述
在这里插入图片描述
打包成功后,新增build文件
在这里插入图片描述
如何访问?
输入npm install -g serve 或者 cnpm install -g serve 安装服务,或者使用nginx,可见https://blog.youkuaiyun.com/hhhmonkey/article/details/119333875类似
在这里插入图片描述
进入build目录输入 serve
在这里插入图片描述
在浏览器输入 http://localhost:5000

Aix升级和安装ssh配置过程 Aix升级和安装ssh配置过程Aix升级和安装ssh配置过程配置前背景配置步骤 Aix升级和安装ssh配置过程 部门IBM小型机的Aix操作系统需要进行ssh补丁修复,修复其实就是ssh版本你的升级,对升级的过程和中途遇到的问题做了记录如下。 配置前背景 操作系统: gdboss2/>uname -u //操作系统的Aix5.3 IBM,020693E5P gdboss2/&gt... 阅读详情

相关推荐

NAO V6 开发环境的配置(附所有文件)

NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S...

wbhhello的博客 3220

Redux-actions 源码解析handleActions

Redux-actions 源码解析handleActions

qq_33715850的博客 881

Mamba实战:如何用Samba框架轻松搞定RGB-D显著性检测(附避坑指南)

本文提供了基于Samba框架进行RGB-D显著性目标检测的实战指南。详细解析了从环境配置、数据预处理到模型推理与可视化的全流程,并重点剖析了多模态数据融合中的常见陷阱与调试技巧,旨在帮助开发者高效部署这一基于Mamba的先进视觉模型,规避工程实践中的典型问题。

dapp9builder的博客 615

Redux 笔记整理

state 需要有默认值,就是redux的初始值,内部需要判断action的type判断,但是处理的时候不能修改原数据,如果需要未声明的type.要返回原来的state。​ subscribe(listener):注册监听(订阅),当状态发生变化,就会执行(执行的方法自己写)。​ dispatch(action):分发action,触发reducer调用,产生新的state;redux-action - 一个对象或者行为的抽象(要做的事情)【eg:点按钮+1 的事】

阿狸演绎的博客 501

从理论到实践:使用Sigrity SystemSI完成DDR4信号完整性仿真全流程解析

本文详细解析了使用Sigrity SystemSI完成DDR4信号完整性仿真的全流程,从核心挑战到实战操作。文章深入探讨了DDR4信号完整性问题,介绍了SystemSI工具链的演进与分工,并提供了从前期准备到高级技巧的详细指南,帮助工程师有效解决DDR4设计中的信号完整性问题。

weixin_30505225的博客 511

/proc/sys/vm/max_map_count耗尽时,调用glibc 2.11.3 free()导致程序crash,问题追踪和解决

1. 问题 在客户环境下,当我们的程序消耗较大内存时,会偶尔crash。 通过gdb分析,程序core dump在malloc/free函数内。 当把/proc/sys/vm/max_map_count 从65530增加到131070,程序再也不crash。 相关命令 echo 131073 > /proc/sys/vm/max_map_count 2.  core

万大胖博客,苦并快乐着 4430

Redux状态管理笔记

注意: 在redux里会要求返回一个全新的state出来,原因是处于性能考虑,如果改变了某个属性,redux还需要去一个个对比是哪个属性发生了变化,而对于一个大型的数据结构来说,做深度检查是及其好性能的,所以redux选择了返回一个新的对象的方式。(创建一个对象的方式比做深度的对比性能要开销的小的多)。 计算机中如果有一些事情不能理解,要么就是出于性能,要么就是出于安全性考虑的 reducer是一个函数,在createStore的时候会自动执行一次。 store的两个方法: store.getStat.

EmotionComputer 1270

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 166

react笔记-04redux篇

流程:创建action=>dispatch分发action=> 交给store=>reducer加工数据返回给store。 redux使用。react-redux使用。

m0_65519288的博客 1236

Qt EGLFS 图形后端详解

EGLFS (EGL Full Screen) 是Qt框架在嵌入式Linux系统中的高性能图形显示后端,它提供了直接基于EGL和OpenGL ES的硬件加速渲染解决方案。

浩瀚之水的专栏 513

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 521

推荐使用并手写实现redux-actions原理

文章目录一、前言二、介绍2.1 创建action2.2 reducer2.3 触发action三、 认识与手写createAction()3.1 用法3.2 原理实现四、认识handleActions五、认识与手写实现handleAction5.1 用法5.2 原理实现六、handleActions原理实现最后参考文章 一、前言 为什么介绍redux-actions呢? 第一次见到主要是接手公司原有的项目,发现有之前的大佬在处理redux的时候引入了它。 发现也确实 使得 在对redux的处理上方便了许多,

weixin_43964148的博客 488

CSP - 2024 普及组初赛试题及解析

CSP - 2024 普及组初赛试题及解析

QD_Jason的博客 2911

redux官网学习笔记

Redux 是一个使用叫做 “action” 的事件来管理和更新应用状态的模式和工具库 它以集中式 Store(centralized store)的方式对整个应用中使用的状态进行集中管理,其规则确保状态只能以可预测的方式更新。Redux 是一个小型的独立 JS 库。但是,它通常与其他几个包一起使用:React-Redux、Redux Toolkit、Redux DevTools 扩展。

MissXu666的博客 1019

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

redux学习笔记

上周学习了flux,这周研究了一下redux,其实很早之前都已经在研究他们了,只是之前一直没搞懂,最近这两周可能打通了任督二脉,都算入门了。 写博客的目的主要是做一下笔记,总结一下思路,以及和大家交流交流 在介绍redux之前,先回顾一下上周学习的flux:   flux的流程是: view触发action中的方法; action发送dispatch; store接收新的数据进行合并

three_bird的博客 3655

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

React学习笔记九——React-redux的使用详解

const {value} = this.selectNumberconst {count} = this.propsif(count % 2 !== 0){this.props.increment(value*1)}}incrementAscyn= () => {const {value} = this.selectNumberthis.props.incrementAsync(value*1,500)}render(){return( this.selectNumber

2401_84411557的博客 1052

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

React-Redux学习笔记

之前用react开发了一些模块,对react的使用也更加熟悉了。最近有空,来总结记录一下react相关生态,系统的梳理一下,便于更好的理解和记忆。 参考资料: React-redux框架之connect()与Provider组件 用法讲解 Redux 类比Vuex,Redux也是用来解决复杂SPA中的全局状态管理问题。通过对比来一起记忆。 三大原则: 单一数据源:整个应用只能有一个唯...

Creabine的博客 429

Redux 入门学习笔记 ① —— 基本概念及使用

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】我特地针对初学者整理一套前端学习资料。

m0_61408947的博客 725

Redux小白学习笔记

Redux学习笔记Redux简介StoreactionReducerReact-ReduxconnectmapStateToPropsmapDispatchToPropsProviderredux-thunkaction creator Redux 本篇学习笔记是针对自己的项目所写的,所以有看不懂的地方要或者更多的注释和细节需要参加全栈小项目(react+redux+koa+mongo)中的(/client/src)部分,欢迎点赞支持~ 简介 首先关于react中redux环境的搭建: cnpm i red

weixin_42280395的博客 622

【超全】React学习笔记 下:路由与Redux状态管理

几十万字超全的React学习笔记,包学包会

weixin_43654363的博客 1258

学习笔记:redux-saga

redux-saga学习笔记 基础概念 使用Saga Helpers 第一个函数 takeEvery是最为常见的,它提供了类似 redux-thunk的行为。 import {takeLatest,takeEvery} from 'redux-saga' 如果你有多个Saga 监视不同的action ,你也一用内置辅助函数创建很多的观察者。就像是用fork来派生一样。 声明式Effe...

qq_31445163的博客 293

Redux学习笔记

bilibili 黑马视频学习笔记

就是记笔记用的 585

redux与react-redux学习笔记

少年驰骋,仗剑天涯 愿你眼眸有星辰,心中有大海 从此,以梦为马,不负韶华 redux 是一个应用数据流框架,主要是解决了组件间状态共享的问题,原理是集中式管理。 React-redux是为方便react使用,在redux上封装的库。在实际的项目中我们可以使用redux也可以直接使用react-redux。 1.redux 1.redux的概念 redux和react之间是没有关系的,Redux支持React、angular、jQuery甚至Javascript redux 是一个应用数据流框架,主要是解.

yezi__6的博客 2483

Redux 学习笔记

这里写自定义目录标题1、什么是Redux2、配置Redux3、TodoList案例4、Redux-thunk中间件5、Redux中间件执行原理6、react-redux7、数据持久化7.1、基本用法7.2、整合react-redux 1、什么是Redux Redux 是React生态中重要的组成部分。很多人都说,简单的应用可以不用此工具。但是我个人认为,中小型应用使用的话,可以使文件结构更加规范,代码可读性更强。因为React提出将展示组件与容器组件分离的思想,所以降低了React 与Redux之间的耦合度

estrusKing的博客 271
上一篇: React学习:路由定义及传参、数据复用-学习笔记
下一篇: 制作个人动态简历
monkeyhlj
博客等级 码龄9年 1万+粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值