图解redux和react的关系

最近研究了下redux项目里的example里面的目录结构,发现里面文件夹比较多,概念也比较多,所以画图整理一下;

以examples中的real-world为例,文件结构长这个样子

先简单看一下redux和react的数据流:

redux

         ┌──────────────────────────┐
         │                          │
         │                          │
         │               ┌────────────────────┐
         │               │      Reducers      │
         │               └────────────────────┘
         │                          ▲
         ▼                          │
┌────────────────┐       ┌────────────────────┐
│      Store     │       │     MiddleWares    │
└────────────────┘       └────────────────────┘
         │                          ▲
         │                          │
         │               ┌────────────────────┐
         │               │  dispatch(Action)  │
         │               └────────────────────┘
         │                          ▲
         │                          │
         └──────────────────────────┘

react

┌─────────────┐
│    State    │─────────────┐
└─────────────┘              │
       │                     │
       │             ┌──────────────┐
       │             │   onChange   │
       │             └──────────────┘
       │                     ▲
       ▼                     │
┌────────────┐               │
│ Component  │───────────────┘
└────────────┘

在react中使用redux是用Store将state替换掉,变成下面的情况;

┌────────────┐
│   Store    │───────────────┐
└────────────┘                │
       │           ┌────────────────────┐
       │           │      Reducers      │
       │           └────────────────────┘
       │                      ▲
       │                      │
       │           ┌────────────────────┐
       │           │     MiddleWares    │
       │           └────────────────────┘
       │                      ▲
       │                      │
       │           ┌────────────────────┐
       │           │  dispatch(Action)  │
       │           └────────────────────┘
       ▼                      ▲
┌────────────┐                │
│ Component  │────────────────┘
└────────────┘

这个变换过程要做的事情是:

  1. 将onChage替换为dispatch(Action);
  2. 将store中的状态引入到Component中用于render;

就是上图中Component的出口和入口两个点,着两个点对接好,数据流就接通了。

看看examples里是怎么做的,它的目录结构里包含了6个文件夹componentsactionsmiddlewarereducersstorecontainers:分别对应上图的五块再加上数据连接:

  • components存储Component的代码
  • actions存储Actions的代码
  • middleware存储redux中间件的代码
  • reducers存储Reducer的代码
  • store存储初始化Store的代码
  • containers最关键,将Component的事件、状态分别连接到Action和Store;

比如containers/UserPage.js的代码:

function mapStateToProps(state, ownProps) {
  const { login } = ownProps.params

  return {
    login
  }
}

import {loadUser, loadStarred} from '../actions';
export default connect(mapStateToProps, {
  loadUser,
  loadStarred
})(UserPage)

最后这个connect的函数的两个参数分别将
1. Store中的状态映射到component.props中;
2. 将Action映射到component的事件中;

时间: 2024-12-23 03:54:19

图解redux和react的关系的相关文章

使用React + Redux + React-router构建可扩展的前端应用

现在是前端开发最好的时代,有太多很好的框架和工具帮你更好的实现复杂需求;同时又是最困难的时代,因为需要掌握太多的框架和工具.如何利用好各种框架来提高前端开发质量是大家都在探索的问题.本文就将介绍如何使用 React 及其相关技术,来进行实际前端项目的开发.因为主要介绍如何将技术用于实践,所以希望读者已经对相关概念已经有一定的了解. 本文最初来源于笔者在 StuQ 的一次同名课程直播,现在加以整理成文,希望能对更多的人有所启发.为了固化这种实践方式,当时还开发了一个名为 Rekit 的工具,用于确

React + Redux 入坑指南

Redux 原理 1. 单一数据源 all states => Store 随着组件的复杂度上升(包括交互逻辑和业务逻辑),数据来源逐渐混乱,导致组件内部数据调用十分复杂,会产生数据冗余或者混用等情况. Store 的基本思想是将所有的数据集中管理,数据通过 Store 分类处理更新,不再在组件内放养式生长. 2. 单向数据流 dispatch(actionCreator) => Reducer => (state, action) => state 单向数据流保证了数据的变化是有

Redux教程2:链接React

序 通过前面的教程,我们有了简单的环境,并且可以运行 Redux 的程序,也对 如何编写Redux示例 有了初步的印象: 掌握了 使用Redux控制状态转移,继而驱动 React 组件发生改变,这才是学习Redux的初衷. 本篇我们将 Redux 和 React 联合起来,着重讲解 redux-react 模块的使用: 1.编写红绿灯React组件 在原有的基础上,我们编写红绿灯组件: touch components/light/index.js components/light/index.

React + Redux 入门(一):抛开 React 学 Redux

redux简介 Redux 是一个改变状态(state)的模型,这个模型通过一个单向操作的方式来改变状态.现在网上教程一言不合上来就是 Redux + React 的综合运用,经常搞的人一脸懵逼.其实 Redux 和 React 完全解耦,并不是 Redux 非得和 React结合才能使用,而只是 React 结合 Redux 会事半功倍.本系列主要也讲得这个. 对于日益复杂的 Javascript 应用来说,Javascript 需要管理非常多的 state.包括本地尚未持久化到数据库的数据.

使用Redux管理你的React应用

React是最好的前端库,因为其发源于世界上最好的后端语言框架. -信仰 4.0 will likely be the last major release. Use Redux instead. It's really great. -Flummox框架作者 acdliteAndrew Clark 为什么使用React还需要使用别的框架来搭配? React的核心是使用组件定义界面的表现,是一个View层的前端库,那么在使用React的时候我们通常还需要一套机制去管理组件与组件之间,组件与数据模

Redux系列02:一个炒鸡简单的react+redux例子

前言 在<Redux系列01:从一个简单例子了解action.store.reducer>里面,我们已经对redux的核心概念做了必要的讲解.接下来,同样是通过一个简单的例子,来讲解如何将redux跟react应用结合起来. 我们知道,在类flux框架设计中,单向数据流转的方向无非如下: 转换成redux的语言,就是这个样子.接下来就看实际例子,一个简单到不存在实用价值的todo list. 例子:实际运行效果 本文的代码示例可以在github上下载,点击查看.README里有详细的运行步骤,

Redux教程3:添加倒计时

前面的教程里面,我们搭建了一个简单红绿灯示例,通过在console输出当面的倒计时时间:由于界面上不能显示倒计时,用户体验并不良好,本节我们就添加一个简单的倒计时改善一下. 作为本系列的最后一篇文章,将示例如何处理多个Redux.React的情形: 1.创建Counter类 我们定义倒计时的类名为 Counter ,创建所需要的文件(夹): mkdir actions/counter reducers/counter stores/counter components/counter views

XCoreRedux框架:Android UI组件化与Redux实践

XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 https://github.com/nuptboyzhb/ XCoreRedux源码+Demo:https://github.com/nuptboyzhb/XCoreRedux 使用android studio打开该项目. 目录结构 demo 基于xcore框架写的一个小demo xcore XCoreRedux核心代码库 pics 文档的pic资源 前言 Android开发当中的Code Archi

React 实践心得:react-redux 之 connect 方法详解

Redux 是「React 全家桶」中极为重要的一员,它试图为 React 应用提供「可预测化的状态管理」机制.Redux 本身足够简单,除了 React,它还能够支持其他界面框架.所以如果要将 Redux 和 React 结合起来使用,就还需要一些额外的工具,其中最重要的莫过于 react-redux 了. react-redux 提供了两个重要的对象,Provider 和 connect,前者使 React 组件可被连接(connectable),后者把 React 组件和 Redux 的