React学习笔记--在组件化开发中使用redux

SPAD单光子雪崩二极管:从基础原理到前沿应用 本文深入解析SPAD单光子雪崩二极管的基础原理、硬件实现关键及核心性能参数,并探讨其在激光雷达、量子通信和生物医学成像等前沿领域的创新应用。SPAD凭借超高灵敏度和精确的时间分辨率,正在推动自动驾驶、量子技术和医学诊断等领域的革命性发展。 阅读详情

在组件化开发中,不管是使用Vue还是React,都会遇到组件间数据传递的问题,两个框架都有各自的解决方法,一般采用的方法无非是

  1. 将数据放到全局供任何地方调用
  2. 通过组件间层层传递来共享数据
  3. 通过发布订阅的方式

一般情况下,如果只是父组件传到子组件,我们可以直接采用props来传递数据,不管在Vue中还是在React中都可以,但是一旦有多层组件嵌套,那么层层传递数据就会显得非常麻烦,而且后期也难以维护,为了解决这个问题,在React开发中,我们可以使用redux(在Vue中可以使用vuex:Vue学习笔记 在模块化开发中使用Vuex)

Redux


简介

redux可以直接通过npm来安装

npm i redux --save

Redux和Vuex一样,都是状态管理器,Redux中通过将数据放到state仓库中,数据类型使用普通的对象来描述

{
	todoList:[{
		content:'todo 1',
		completed:false
	},{
		content:'todo 2',
		completed:true
	}],
	count:2
}

区别于一般对象的是,该对象没有setter,即不能直接修改这个对象,在Redux中,我们只允许通过发起action来修改state仓库,如果随意修改state,可能会造成难以修复的bug。通过发起action来修改Redux可以使数据流动更在清晰和可预测,且通过发起action来修改可以在redux-devtools中观察到,而直接修改state可能会无法触发props更新。

// action的发起举例
let action={
    type:"changeTitle",
    value:e.target.value
}
store.dispatch(action)

通过声明一个action,使用dispatch将其传递到reducer,reducer返回一个新的state供我们使用

Redux的三个原则
  1. 单一数据源
    整个React应用的数据被保存在一个对象树中,并且该树只存在唯一一个store中
{
	todoList:[{
		content:'todo 1',
		completed:false
	},{
		content:'todo 2',
		completed:true
	}],
	count:2
}
  1. state是只读的
    在Redux中,只能通过发起action来修改state,不能用其他方式来修改(这里的不能更多是一种规则/约束,实际上还是可以修改的,但是不建议这么做,会引起不必要的bug)
// action的发起举例
let action={
    type:"changeTitle",
    value:e.target.value
}
store.dispatch(action)
  1. 使用纯函数来执行修改
    Redux使用reducer来接收state和action,然后将新的state返回给store仓库。
function reducerFn(state=defaultState,action){
	if(action.type==='SHOW_DATA'){
		return action.value;
	}
	return state;	
}

纯函数:返回的值只受传入的参数的影响,不受其他因素的影响
如下面这个函数就不是纯函数

function showDate(){
	return new Date();
}

这个函数受现在的时间的因素影响,所以并非纯函数

核心
Action

前面已经说了,发起action是唯一可以修改state的方法,一个简单的action就只是一个普通的对象,在Redux中,约定action内必须有一个type属性,使用该属性来判断接下来要执行的动作,多数情况下,这个属性会被定义为字符串常量,当使用规模变大时,建议采用单独的模块或者文件来存放action,通过在action发起的文件/模块和reducer文件/模块中引入这些常量,可以让我们在字符串写错的时候有明确的报错。如果不使用这种方式,可能导致我们在发起action时因为type写错而静默失败

// actionTypes中声明常量
export const ADD_TODO = 'ADD_TODO';
export const TOGGLE_TODO = 'TOGGLE_TODO'
// action发起的文件和reducer文件引入常量
import { ADD_TODO, TOGGLE_TODO } from '../actionTypes'
通过函数来创建action

每当我们要修改state时,我们就需要发起action,但是每次都编写这些代码会显得冗余,而且也容易出错,一旦我们要修改常量名对应得那个变量,还要对每个都进行修改,通过使用函数来创建action就可以解决这些问题,使代码更容易维护

function createAddAction(val){
	return {
		type:ADD_TODO,
		val
	}
}

通过这种写法,使得我们可以更好地复用,在使用时,我们只要dispatch这个函数就可以了

store.dispatch(createAddAction('newVal'))
Reducer

Reducer是一个接收state和action的纯函数,通过action的type,来决定对state执行什么修改,而接收的state作为默认值,在一开始没有action时,就返回默认的state

function reducerFn(state=defaultState,action){
	if(action.type==='ADD_TODO'){
		// ...	
		return newState;
	}else if(action.type==='TOGGLE_TODO '){
		// ...
		return newState;
	}
	// ...
	return state;
}

根据官方文档中的要求,不要在reducer中执行下面的操作

  1. 修改传入的参数,即action和state
  2. 执行有副作用的操作,如API请求和路由跳转
  3. 调用非纯函数,像Date.now()或Math.random()

因为不能修改state,但是有时我们只是修改state中的一部分内容,希望能在原来的state的基础上进行修改再return回去,此时我们就要使用深拷贝
官方文档中使用Object.assign()

let newState=Object.assign({}, state, {
  visibilityFilter: action.filter
})

事实上,我们可以直接采用JSON方法来做到深拷贝

let newState=JSON.parse(JSON.stringify(state));
拆分Reducer

现在我们只是在做一个小的demo,那么当我们的应用变大时,由于state是单一的,我们不能像vuex里面拆分成多个文件,每个文件有自己的state
为了解决这个问题,我们可以拆分Reducer,每个拆分出来的Reducer去管理单一state中的不同部分的数据

function todos(state = [], action) {
  // ...
}

function visibilityFilter(state = SHOW_ALL, action) {
  // ...
}

function todoApp(state = {}, action) {
  return {
    visibilityFilter: visibilityFilter(state.visibilityFilter, action),
    todos: todos(state.todos, action)
  }
}

上面的代码中,由todos和visibilityFilter分别管理state中的todos和visibilityFilter,通过这种方式,我们可以把管理不同部分的方法放到不同的文件中,再在总的reducer文件中引入,这样就可以达到拆分state的目的了
此外,在Redux中提供了combineReducers() 工具类来完成上面todoApp的工作

import { combineReducers } from 'redux'
const todoApp = combineReducers({
  visibilityFilter,
  todos
})

export default todoApp
// 上面的代码和下面的代码完全等价
export default function todoApp(state = {}, action) {
  return {
    visibilityFilter: visibilityFilter(state.visibilityFilter, action),
    todos: todos(state.todos, action)
  }
}
Store

Store实际上就是用来存储数据的,在一个应用中,Store有下列的职责

  1. 保存整个应用的数据
  2. 通过getState()来获取state中的数据
    store.getState()返回state对象树
  3. 通过dispatch(action)更新state
  4. 通过subscribe(listener)注册监听器
    这里可以使用下面的代码来在该组件中注册监听器
store.subscribe(()=>{
    this.setState(store.getState())
})
  1. 通过subscribe(listener)返回的函数注销监听器
创建store

创建store非常简单,使用createStore方法,传入reducer即可

import { createStore } from 'redux'
import todoApp from './reducers'
let store = createStore(todoApp)

createState的第二个参数是可选的,用于设置state的初始状态,值得一提的是,如果要使用redux-devtools,那么就要在第二个参数中写上window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()

const store=createStore(
    todoApp ,
    window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()    
);

如果不写上这行,就会出现下面的情况
在这里插入图片描述

Redux中的数据生命周期

  1. 发起action(调用store.dispatch(action))
  2. Redux调用reducer中的函数
    通过store.dispatch,store将原来的state和action传给reducer,触发reducer中的函数
  3. 根reducer将多个子reducer的输出合并成一个单一的state树
    如果没有子reducer,那么就直接输出一个新的state树,如果有子reducer,那么首先要让各个子reducer输出各自管理的值,然后在根state树合并为一个单一的state树
  4. 调用store.subscribe(listener) 的监听器来更新UI
    在通过action发起修改state后,调用store.subscribe(listener)的监听器,让与修改数据相关的UI更新

具体在demo中如何使用,详见React入门 制作简单的todolist

如何点亮一颗sensor 要点亮一个sensor需要从,时钟、sensorI2C,供电,reset脚,mipi的配置几个方面一一确认。 reset脚拉高 给sensor的时钟有没有。(目前用到的常为24MHZ) 供电 查看sensor的数据手册,看有几个电源,用示波器量一下是否为手册规定的电压 比如:DVDD 数字电压: AVDD模拟电压 DOVDD芯片引脚出来的电压等为多少。 sensor的I2C能否抓到 将I2C的口对应上,用示波器量取i2c的波形。 检查有应答并且数据正确。读写地址是否正... 阅读详情

相关推荐

Pyside6+qml+Qtcreator项目实战

PYTHON and QT QUICK - Custom Buttons With QML And JavaScript - [MODERN GUI]-#01

u014627020的博客 920

redux实现非父子关系的组件之间的传参(基础实现,不使用Provider)

真正开发项目的时候会经常遇到非父子关系的组件需要相互传递参数,这里实现一个基础版本的Redux,实际开发中,不使用Provider是极少的,这里仅仅作为一个复习的基础知识作为记载 1.安装Redux npm install redux 2.项目中配置redux 1.根目录下新建store文件夹,然后在该文件夹下新建index.js文件和reducer.js文件   1.1.index.js文...

my_love_download的博客 764

【SeedLab】Packet Sniffing and Spoofing Lab

本节实验要求:借助Scapy库,实现网络流量的捕获与伪造。

cold_windx的博客 4515

redux数据持久化(redux-persist的使用)

一、数据持久化:一般是指页面刷新后,数据仍然能够保持原来的状态。 一般在前端当中,数据持久化,可以通过将数据存储到localstorage或Cookie中存起来,用到的时 候直接从本地存储中获取数据。而redux-persist是把redux中的数据在localstorage中存起来,起到 持久化的效果。 二、使用: 安装:npm i redux-persist --save 在store.js中使用 //引入createStore,专门用于创建redux中最为核心的store对象 i.

hbmern的博客 1万+

Unity Hub报错The Hub as encountered a critical error and must close

如果注册表HKEY_LOCAL_MACHINE\SOFTWARE\Unity Technologies\这个目录下有Hub文件,直接删掉然后重装就可以。C:\Users\Administrator\AppData\Roaming\Unity 作者:SevenVee。HKEY_CURRENT_USER\Software\Unity 下所有项,尝试过,卸载重装,清除临时文件无果后,最终决定删除所有与Hub有关的文件。重装unity后可以打开了。结果:卸载重装后还是会出现此问题。结果:重装后还是无法解决。

qq_42345116的博客 3638

10分钟训练你的AI歌手:RVC WebUI声音克隆保姆级教程

本文提供了一份详细的RVC WebUI声音克隆保姆级教程,指导用户如何在10分钟内利用Retrieval-based-Voice-Conversion技术训练专属AI歌手。教程涵盖从环境配置、数据准备、模型训练到最终推理应用的全流程,即使是新手也能快速上手,实现高质量的声音克隆与歌曲生成。

weixin_29073241的博客 821

react函数式组件中使用react-redux

一、背景 最近我最近在用react重构公司的项目,但是在使用redux时,我遇到了很多坑,经过多次查找资料,特此记录: 二、踩坑过程 因为我已经搭建了项目架构,所以这里只从react-redux的使用开始 1、安装插件 npm i redux react-redux -S 2、定义store仓库,action,reducer redux目录结构如下 我们先来看看index.js,定义全局 数据仓库 /redux/index.js import {legacy_createStore as crea

qq_39246667的博客 3209

魔兽世界怀旧服宏命令全解析:从自动换装到智能判定,老玩家才知道的黑科技

本文全面解析魔兽世界怀旧服宏命令的高级应用,从自动换装到智能判定,揭秘老玩家专属的黑科技技巧。深入探讨怀旧服特有的宏命令机制,包括施法队列、装备切换系统和职业专属技巧,帮助玩家在经典旧世版本中提升战斗效率。

weixin_29230865的博客 732

react函数组件中使用redux

运用了useDispatch、useSelector这两个Hook实现了react组件间的数据共享代替了老版的conncet

FormAda的博客 1323

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

丨汀、的博客 3216

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

react状态管理:redux和react-redux

redux

qq_39307266的博客 1118

作物生长模型Oryza V3实战2:下载、安装与使用

摘要:ORYZA 现在的应用范围已从单一水稻作物模拟扩展到多个水稻作物模拟。我在csdn站内也上传了“作物生长模型oryza v3大全(含所有参数模板和4个校准程序1个分析工具)”,可以说是全网最全的吧。网上搜索一般下载的v3只有一个a3主程序,不适合作全面与深入的研究,本版本从国外下载回来,一开始少了一个“SoilHydrau.exe”文件,说是有病毒被隔离了,后经历各种技术手段,并向国际水道研究所发送邮件,才得以补全所有的参数化及校准程序、分析工具,来之不易,有缘人得之。

503

《前端开发React学习笔记》

React

maeryang0510的博客 213

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

React学习笔记

React学习笔记目录 React学习笔记 文章目录React学习笔记目录前言一、React简介?二、React基本使用1.引入2.相关的js库3. 虚拟DOM与真实DOM4. JSX渲染虚拟DOM(元素)四级标题三、使用步骤1.引入库1.引入库四、使用步骤1.引入库1.引入库总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、

烟雨晴天的博客 3115

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【react | redux】 redux

这个先占个位置,不一定补,还没理清

小赵不忙的博客 177

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

React中使用Redux (一) - 在React中直接使用Redux

尽管这样说,redux依然是和React库结合的更好,因为他们是通过state函数来描述界面的状态,Redux可以发射状态的更新, 让他们作出相应;目前redux在react中使用是最多的,所以我们需要将之前编写的redux代码,融入到react当中去。Profile组件:其中会展示当前的counter值,并且有一个-1和-5的按钮;Home组件:其中会展示当前的counter值,并且有一个+1和+5的按钮;在发生点击事件时,调用store的dispatch来派发对应的action;

m0_71485750的博客 1万+

React-Redux 的使用:连接 React 和 Redux

Provider和connect。Provider是一个 React 组件,它使得 Redux store 可以被应用中的所有组件访问。connect是一个高阶函数,它用于将 Redux store 中的状态和 dispatch 方法注入到 React 组件的 props 中。

你若盛开,清风自来 1753

React中使用Redux (二) - 通过react-redux库连接React和Redux

store中的状态可能是非常多的, 而connect函数的参数的作用是, 要将store中的哪些数据或者方法映射过去, 我们就可以根据自己的需求, 决定映射过去哪些数据, 而不是直接将整个store映射过去(: 参数二也是接收一个参数fn2, 要求fn2也是返回一个对象, 对象中的属性同样会映射到props中去;但是实际上redux官方帮助我们提供了 react-redux 的库,这个库是帮助我们完成连接redux和react的辅助工具, 可以直接在项目中使用,并且实现的逻辑会更加的严谨和高效。

m0_71485750的博客 1万+

【React】Redux的使用详解

Redux就是一个帮助我们管理State的容器:Redux是JavaScript的状态容器,提供了可预测的状态管理

m0_68324632的博客 7353

React实战-ReactJS+Redux的思考

React实战-ReactJS+Redux的思考 ReactJs的官方架构是:ReactJs+Flux。然而作为Flux的升级版,ReactJs+Redux越来越流行,已经有超越ReactJs+Flux的趋势。到底哪种更好,则又是一个仁者见仁、智者见智的事了。但是无论你是否采用Redux,最好还是看看Redux的使用方式,如果能看看Redux的实现方式,将收益匪浅,那是将重构运用的令人敬佩的实际

超期服役软件开发者的博客 2516

在React项目中使用redux

前言: 此博文是记录我在b站上观看redux教学视频的记录 原视频链接在此 react-redux看这个视频就够了! 一、安装相关的插件 1、安装 redux npm install -S redux 2、安装 redux-thunk npm install -S redux-thunk 3、在 chrome 应用商店安装 redux-devtools 二、引入相关插件 import {createStore, combineReducers, compose, applyMiddleware} fr.

Windy_Z的博客 13万+

React-Redux使用

官方推荐的编写 Redux 逻辑的方法。包封装了核心的redux包,包含我们认为构建 Redux 应用所必须的 API 方法和常用依赖。Redux Toolkit 集成了我们建议的最佳实践,简化了大部分 Redux 任务,阻止了常见错误,并让编写 Redux 应用程序变得更容易要写任何的 Redux 逻辑,你都应该使用 Redux Toolkit 来编写代码创建 Redux Toolkit 来消除手写 Redux 逻辑中的「样板代码」,防止常见错误,并提供简化标准 Redux 任务的 API。

一只小松鼠_的博客 1487

React-redux使用教程

react-redux,Redux 是 JavaScript 应用的状态容器

xm1037782843的博客 3318

React 如何使用Redux的说明

React是一个用于构建用户界面的JavaScript库。它由Facebook开发和维护,并且是一个非常流行的库,被广泛用于Web应用程序开发。React使用组件的思想来构建UI,每个组件都是一个独立的、可重用的UI元素。React的主要特点包括:虚拟DOM:React使用虚拟DOM来提高性能。它会将UI的状态保存在内存中,并在需要时更新实际DOM。组件化:React使用组件化的思想来构建UI。每个组件都是一个独立的、可重用的UI元素。单向数据流:React使用单向数据流来管理组件之间的通信。

世间万物皆不如你 1498

【react+redux】 react使用redux相关内容

redux、函数调用签名

weixin_43872912的博客 1742
上一篇: React学习笔记 在todolist中加入redux
下一篇: React-router学习笔记 react-router基本使用
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值