前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redux 异步数据流初探

Redux 异步数据流初探

作者头像
一个会写诗的程序员
发布于 2018-12-13 08:17:06
发布于 2018-12-13 08:17:06
63900
代码可运行
举报
运行总次数:0
代码可运行

Redux 简介

用React写的项目中各组件的状态依赖关系非常复杂,为了便于管理组件的状态,使用 Redux。

组件化是react最擅长的方面,但是在实际开发中,随着应用复杂度地不断提升,组件之间的状态通信变得越来越多,组件之间的耦合也变得越来越重。

这时,Redux诞生了。

Redux对所有“组件”说:

你们不要在一对一地写信通知状态了,我是你们的 “通信云基站”,你们把公共状态存在我这,只要某个状态一改变,各组件都能取到状态的最新值。

在Redux中,最为核心的概念就是 state、action 、reducer 以及 store,单词大家都懂,就是初学者不知道该怎么用。

result

以常见的红路灯为例,将其应用到Redux中:

action:就是灯的变化,"红变绿"等,用名词表述 state:就是灯的名字,红灯、绿灯等,用名词表述 reducer:就是灯的变化规则,红灯之后是绿灯等,用状态转移表述,归根到底也是名词 store:就像是交警,执行上述的交通规则;

image.png

image.png

Redux 的精髓 API

(1)store: store对象是保存公共数据的地方,一个应用只能创建一个store。下面是创建store方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore } from 'redux';
const store = createStore(function);

(2)state:state是store映射的数据集合,一个 state 只对应一个 view,下面是创建state方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore } from 'redux';
const store = createStore(function);
const state = store.getState(); // 通过store.getState()拿到state

(3)action:state和view捆绑在一起,view发生变化时会用action发出通知。action是改变state的唯一方法,它本质是一个对象,必须要写一个代表action名称的属性——type。除此之外,其他属性可以自由设置,下面是action对象示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const action = {  
  type: 'student_age',  
  age: 12
};

(4)store.dispatch():store.dispatch()是 view 发出 action 的唯一方法,也可以理解为发射action通知的唯一方法。下面是使用store.dispatch()的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
store.dispatch({
  type: 'student_age',
  age: 12
});

(5)reducer:reducer是一个计算state的函数,接受两个参数,当前的state和action。当store收到action通知后,一定要返回一个全新的state,这样view才能发生变化。store接收到action传来的数据,然后根据逻辑计算数据,这个过程就称为reducer。下面是reduer的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore } from 'redux';
const reducer = (state = defaultState, action) => { 
  switch (action.type) {    
    case 'student_age':      
      return state + action.age;    
    default:       
      return state;  
}};
const store = createStore(reducer); // 生成store时传入reducer

实际开发中要在生成store时传入reducer,这样store.dispatch()会自动触发reducer函数执行。

(6)store.subscribe():store.subscribe()监听state变化,state一旦变化就自动触发该函数。下面是它的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore } from 'redux';
const store = createStore(reducer);
store.subscribe(listener);

通过一张图来看一下redux、react-redux是如何工作的:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React、Flux以及Redux小结
React和Vue是当下前端最流行的Javascript框架。作为一名现代化前端工程师,学习这两个框架已经成为了标配。 本人学习这两个框架已经有很长一段时间了,当下对其做一些基本概念梳理总结,利人利己。
epoos
2022/06/06
6890
React、Flux以及Redux小结
深入学习 Redux 之基础用法
① Web 应用是一个状态机,视图与状态是一一对应的。 ② 所有的状态,保存在一个对象里面。
Leophen
2021/07/16
4810
深入学习 Redux 之基础用法
Redux初学者入门解析
Redux是一个流行的JavaScript框架,为应用程序提供一个可预测的状态容器。Redux基于简化版本的Flux框架,Flux是Facebook开发的一个框架。在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了数据只能在一个方向上流动。其工作流程如下图
henu_Newxc03
2021/12/28
6260
Redux初学者入门解析
Redux 入门教程(一):基本用法
一年半前,我写了《React 入门实例教程》,介绍了 React 的基本用法。 React 只是 DOM 的一个抽象层,并不是 Web 应用的完整解决方案。有两个方面,它没涉及。 代码结构 组件之间的通信 对于大型的复杂应用来说,这两方面恰恰是最关键的。因此,只用 React 没法写大型应用。 为了解决这个问题,2014年 Facebook 提出了 Flux 架构的概念,引发了很多的实现。2015年,Redux 出现,将 Flux 与函数式编程结合一起,很短时间内就成为了最热门的前端架构。 本文详细介绍
ruanyf
2018/04/12
1K0
Redux 入门教程(一):基本用法
Redux 入门到高级教程
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 (如果你需要一个 WordPress 框架,请查看 Redux Framework。)
老马
2019/05/25
2.8K0
【React】360- 完全理解 redux(从零实现一个 redux)
记得开始接触 react 技术栈的时候,最难理解的地方就是 redux。全是新名词:reducer、store、dispatch、middleware 等等,我就理解 state 一个名词。
pingan8787
2019/09/25
7740
【React】360- 完全理解 redux(从零实现一个 redux)
深入Redux架构
关于redux 之前写了一篇通过一个demo了解Redux,但对于redux的核心方法没有进行深入剖析,在此重新总结学习,完整的代码看这里。(参考了React 技术栈系列教程) 什么情况需要用redu
牧云云
2018/05/02
2.3K0
深入Redux架构
手写一个Redux,深入理解其原理
Redux可是一个大名鼎鼎的库,很多地方都在用,我也用了几年了,今天这篇文章就是自己来实现一个Redux,以便于深入理解他的原理。我们还是老套路,从基本的用法入手,然后自己实现一个Redux来替代源码的NPM包,但是功能保持不变。本文只会实现Redux的核心库,跟其他库的配合使用,比如React-Redux准备后面单独写一篇文章来讲。有时候我们过于关注使用,只记住了各种使用方式,反而忽略了他们的核心原理,但是如果我们想真正的提高技术,最好还是一个一个搞清楚,比如Redux和React-Redux看起来很像,但是他们的核心理念和关注点是不同的,Redux其实只是一个单纯状态管理库,没有任何界面相关的东西,React-Redux关注的是怎么将Redux跟React结合起来,用到了一些React的API。
蒋鹏飞
2020/10/15
5090
手写一个Redux,深入理解其原理
Redux入门到使用。
action:是把数据从应用(译者注:这里之所以不叫 view 是因为这些数据有可能是服务器响应,用户输入或其它非 view 的数据 )传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过 store.dispatch() 将 action 传到 store。
用户3467126
2019/07/03
8800
Redux入门到使用。
React的诱惑: React-Redux-三大原则和React-Redux-基本使用、优化、综合运用、其他组件使用
官方文档:https://www.redux.org.cn/docs/introduction/ThreePrinciples.html
杨不易呀
2023/09/25
3540
React的诱惑: React-Redux-三大原则和React-Redux-基本使用、优化、综合运用、其他组件使用
Redux/react-redux/redux中间件设计实现剖析
在一切开始之前,我们首先要回答一个问题:为什么我们需要redux,redux为我们解决了什么问题?只有回答了这个问题,我们才能把握redux的设计思路。
Nealyang
2020/04/23
2.3K0
Redux/react-redux/redux中间件设计实现剖析
Redux 源码解析系列(一) -- Redux的实现思想
Redux 其实是用来帮我们管理状态的一个框架,它暴露给我们四个接口,分别是: createStore combineReducers bindActionCreators applyMiddlewa
IMWeb前端团队
2017/12/29
7510
深入理解redux
第二个原因是最近面试的过程中,发现很多候选人对redux的理解很浅,甚至有错误的理解。真正理解redux的思想的人非常好,更不要说理解它其中的精妙设计了。
前端迷
2019/07/23
9730
深入理解redux
深度理解Redux原理并实现一个redux
Redux的作用在于实现状态传递、状态管理。在这里你可能会说了,如果是状态传递,那我props的传递不也是可以达到这样的效果吗?context上下文方案不也是可以达到这样的效果吗?没错,是这样的,但是上述的两种方案是有局限性的。
夏天的味道123
2022/10/19
4340
redux
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。可以让你构建一致化的应用,运行于不同的环境(客户端、服务器、原生应用),并且易于测试。Redux 除了和 React 一起用外,还支持其它界面库。 它体小精悍(只有2kB,包括依赖)。
_kyle
2020/08/24
8750
redux
Redux的设计模式
React官方网站是这样形容React的,A JavaScript library for building user interfaces。React实际上是一个编写页面的UI框架,或者说他只是一个UI的library,一个库而已。
前端达人
2021/03/16
1.6K0
Redux的设计模式
深入理解redux
在使用 react 的过程中,通常我们会通过 props 将父组件的一些数据传递到子组件,兄弟组件传递数据通过一个共同的父级,子传父可以通过回调函数来进行传递,当然这都是比较理想的情况,业务中往往不可能仅仅这样简单,最常见的一点就是跨很多层级的传递,你不可能一层层的通过 props 传递,这会让你的 props 变的异常臃肿不便
FE情报局
2023/05/26
7330
深入理解redux
1228-redux学习笔记(摘录) | WEB前端零基础课
今天的WEB零基础课的内容是Redux,它的思路比较“拧”,不怎么好理解,算是react里的一个难点。讲完之后,同学们纷纷表示没听懂, 这个东西只靠听,肯定是搞不懂的,还是要多写,通过多写去理解它的运行思路。 在我看来,redux的目的之一,就是把数据的传递从组件的层级上,剥离开。不使用redux时,组件的层级,其实是react数据的传递的通道。 要多写,否则没用。 <!-- 1228的redux学习笔记摘录 --> redux [ri:'dʌks],是reactJs的状态管理。 它就是用来专门的管
web前端教室
2018/02/07
1K0
1228-redux学习笔记(摘录) | WEB前端零基础课
React 进阶 - React Redux
应用初始化时候,只请求一次数据,然后通过状态管理把数据存起来,需要数据的组件只需要从状态管理中‘拿’就可以了。
Cellinlab
2023/05/17
1K0
React 进阶 - React Redux
React---Redux的基础使用
   3.例子:{ type: 'ADD_STUDENT',data:{name: 'tom',age:18} }
半指温柔乐
2021/04/30
8210
React---Redux的基础使用
相关推荐
React、Flux以及Redux小结
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档