redux基础概念及执行流程详解

一、执行流程

全局有一个公共的容器(所有组件都可以操作),我们可以在某个组件中把全局容器中的信息进行修改,而只要全局信息修改,就可以通知所有用到该信息的组件重新渲染(类似于发布订阅)==》redux就是这种解决方案:redux只有一个作用,就是为了实现组件之间的信息交互。

1.执行createStore

  • 创建一个容器store来用来管理公用的状态信息
  • 创建一个事件池,用来存储一些方法(方法一般都是用来通知某个组件重新渲染的)
  • 当容器中的状态改变,会自动通知事件池中的方法依次执行

2.基于store.getState可以获取容器中存储的状态信息(拿到状态信息就可以做数据绑定等操作了)

3.我们可以基于store.subscribe向事件池中追加方法(也可以移除事件池中的方法)

4.修改容器中的状态信息

  • 首先雇一个管理员reducer,它就是用来修改容器中状态的
  • 当我们在组件中进行某些操作想要修改状态信息的时候,我们首先dispatch派发一个任务给reducer,并且告诉reducer如何去修改状态信息

公共状态信息都是reducer去改的,reducer记录了所有修改状态的行为方式,我们以后想要知道怎么改的状态,只要看reducer即可。

  • redux:不局限于任何框架(vue/react/angular/jquery...)
  • react-redux:把redux进一步封装,专门给react框架开发的(操作起来更简洁)
  • vuex:类似于redux的操作思想,专门为vue框架定制的
  • dva:把redux/react-redux进一步封装,操作更简洁
  • mobx:和redux不完全一致,也是用来管控公共状态的,只不过操作起来更加简单而已

画一张简易流程图

2.具体代码

App.js

import {createStore} from ‘redux‘

/**
 * 创建redux容器用力啊管理公共的状态信息
 * 1.创建容器的时候其实已经准备好了管理员reducer了
 * 2.createStore(reducer):相当于创建一个容器并雇佣了一个管理员reducer
 * 3.创建出来的store存在几个属性:getState/dispatch/subscribe
 */

let store = createStore(reducer);
window.store = store;   //把创建的容器挂载到全局下,保证每一个子组件都可以获取到store,从而执行一些其它的操作(当然也可以基于属性)

//reducer管理员是一个方法:reducer方法是在dispatch派发的时候执行的
//state:现有store容器中的状态信息(如果store中没有,我们给一个初始值)
//action: 告诉reduce如何去修改状态都在action中(它是一个对象,对象中固定的有type属性:派发任务的行为标识,reducer就是根据不同的行为标识来修改状态信息的)
function reducer(state = {
    n: 0,
    m: 0
}, action) {
    //reducer就是根据不同的行为标识来修改状态信息的
    switch (action.type) {
        case ‘support‘: state.n = state.n+1;break;
        case ‘against‘: state.m = state.m+1;break;
    }
    return state;   //return的是什么,就会把store中的状态改成什么
}

<Vote></Vote>  //调用

vote.js
import React from ‘react‘;
import VoteHeader from ‘./voteHeader.js‘
import VoteBody from ‘./voteBody.js‘
import VoteFooter from ‘./voteFooter.js‘
class Vote extends React.Component{
    constructor(){
        super()
    }
    render() {
        return (
            <div>
                <VoteBody></VoteBody>
                <VoteFooter></VoteFooter>
            </div>
        )
    }
}
export default Vote;

voteBody.js
import React from ‘react‘;
class VoteBody extends React.Component{
    constructor(){
        super()
    }
    componentDidMount() {
        //通过subscribe追加事件,进行强制更新
        window.store.subscribe(()=>{
            this.forceUpdate();
        })
    }
    render() {
        //获取状态的改变
        let {n, m} = window.store.getState();
        return (
            <div>
                <div>赞成{n}票</div>
                <div>反对{m}票</div>
            </div>
        )
    }
}
export default VoteBody;

voteFooter.js
import React from ‘react‘;
class VoteFooter extends React.Component{
    constructor(){
        super()
    }
    render() {
        let store = window.store;
        return (
            <div>
                //通过dispatch通知reducer根据不同的标示修改不同的状态
                <button onClick={e => store.dispatch({type: ‘support‘})}>赞成</button>
                <button onClick={e => store.dispatch({type: ‘against‘})}>反对</button>
            </div>
        )
    }
}
export default VoteFooter;

原文地址:https://www.cnblogs.com/chaixiaozhi/p/12215062.html

时间: 2024-10-10 03:46:14

redux基础概念及执行流程详解的相关文章

git概念及工作流程详解

git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别及理解git几个重要概念. 至于什么是git,git的发展历史,网上已经有很多资料,可以自行google或百度. 关于git与svn的区别 这里不针对git与svn的区别详细深究,以便对双方的优缺点了解更多些. 1) 最核心的区别Git是分布式的,而Svn不是分布的. 能理解这点,上手会很容易,声明

Spring 框架基础(06):Mvc架构模式简介,执行流程详解

本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序 M:代表模型Model 模型就是数据,应用程序的核心. V:代表视图View 回显数据的界面,例如JSP就是用来展示模型中的数据. C:代表控制器Controller 控制器的作

springmvc的执行流程详解

1.什么是MVC MVC是Model View Controller的缩写,它是一个设计模式 2.springmvc执行流程详细介绍 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler 可以根据xml配置.注解进行查找 第三步:处理器映射器HandlerMapping向前端控制器返回Handler 第四步:前端控制器调用处理器适配器去执行Handler 第五步:处理器适配器去执行Handler 第六步:Han

Struts2框架执行流程详解

1. Struts2源码导入对于struts2框架它的源代码我们主要使用三部分 struts2核心部分源代码 org.apache.struts2xxsrc\core\src\main\java struts2的xwork核心部分源代码src\xwork-core\src\main\java\com\opensymphony\xwork2 struts2的插件的源代码src\plugins2. 关于struts.xml配置文件中提示问题第一步在eclipse的window下首选面中查找xml c

AngularJS执行流程详解(转)

一.启动阶段 大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点.我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOM

AngularJS执行流程详解

一.启动阶段 大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点.我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOM

IMS AKA鉴权及应用流程详解

IMS AKA鉴权及应用流程详解 @auth doubleRabbit @date 2017-03-14 目的 了解鉴权及通信类业务相关鉴权算法的概念原理 了解IMS注册流程 了解IMS鉴权流程应用 鉴权含义 鉴权是指用户访问系统的权利,是提升系统安全性的一种方式,传统鉴权方法就是用户名与密码. 鉴权与授权的区别联系.逻辑上授权过程发生在鉴权之后,而实际中有时鉴权与授权对于用户来说体现为同一过程.例如在EPC附着过程中,先发生AIA鉴权过程,再发生ULR位置更新过程(授权). 接下来讲的是针对通

ssl协议工作流程详解

SSL 协议 (HTTPS) 握手.工作流程详解 (双向 HTTPS 流程 )SSL 协议的工作流程:服务器认证阶段: 1)客户端向服务器发送一个开始信息"Hello"以便开始一个新的会话连接; 2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的"Hello"信息时将包含生成主密钥所需的信息; 3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器; 4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信

X264编码流程详解(转)

http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如何构建起来一直感觉很神秘,于是决定在理解理论的基础上潜心于编码器实现框架.关于开源的H264编码器有很多,JMVC,T264.X264,这里选择X264,因为网上关于X264源码分析资源很多.X264编码器是一个开源的经过优化的高性能H.264编码器,目前最新的源码在本人的I5处理器的PC机上,编码