zoukankan      html  css  js  c++  java
  • redux【react】

    首先介绍一下redux就是Flux的一种进阶实现。它是一个应用数据流框架,主要作用应用状态的管理

    一、设计思想:

    (1)、web应用就是一个状态机,视图和状态一一对应

    (2)、所有的状态保存在一个对象里面

    二、三大原则:

    (1)、单一数据源

    整个store被储存在一个Object tree(对象树)中,并且这个Object tree只存在于唯一一个store中

    (2)、state是只读的

    唯一改变state的方法就是触发action,action是一个用于描述已发生事件的普通对象

    (3)、使用纯函数来修改(reducer)

    为了描述action如何改变state tree,你需要编写reducers

    三、redux适用的场景

     

    (1)、用户的使用方式复杂

    (2)、不同身份的用户有不同的使用方式(比如普通用户和管理员)

    (3)、多个用户之间可以协作

    (4)、与服务器大量交互,或者使用了WebSocket

    (5)、View要从多个来源获取数据

    当项目多交互、多数据源的时候必须用到redux

    从组件的角度来看什么时候用到redux

    (1)、某个组件的状态,需要共享

    (2)、某个状态需要在任何地方都可以拿到

    (3)、一个组件需要改变全局状态

    (4)、一个组件需要改变另一个组件的状态

    四、redux的工作流程

     

    五、创建store

    (1)、安装 yarn add redux --dev

    (2)、引入 import { createStore } from "redux";

    (3)、创建一个store = createStore(reducer)

    应用createStore创建store  createStore中必须传递一个reducer

    import {createStore} from  "redux";
    
    
    import  reducer  from  "./reducer";
    
    
    const  store = createStore(reducer); 

    六、创建reducer.js

    const  defaultState={}
    
    
    export default (state=defaultState,action)=>{
                 return  state;
    
    } 

     

    这个函数里面有2个参数一个是state,另一个是action。

    state指的是store中的数据

    action指的是View修改数据的时候传递过来的action

    这个函数必须返回一个新的数据,而且还不能对老的数据进行修改(Reducer函数中不能改变state,必须返回一个全新的对象)

    我们可以先把这个state设置一个默认值defaultState。在defaultState这个对象中我们可以定义一些初始的数据

    七、导出Store

    import {createStore} from  "redux";
    
    
    import  reducer  from  "./reducer";
    
    
    const  store = createStore(reducer); 
    
    
    export  default  store;

    导出的store这个对象中默认自带了一些方法

    (1)、dispatch:用来传递action

    (2)、getState:返回值就相当于this.state中的数据,里面存放着公共的数据

    (3)、replaceReducer:

    (4)、subscribe:监听数据的改变,必须传递一个函数

    (5)、Symbol(observable):

    八、创建action

    let  action={
        type:“NUM__ADD”
    }  

    九、将Action传递给store  

    store.dispatch(action)
    

    十、监听数据的改变

    store.subscribe()

    实例:
    
    constructor(){
        super();
        store.subscribe(this.handUPdate.bind(this))
    
    }
    
    handleUpdate(){
    
       this.setState(store.getState())
    }
    

       十一、如何将reducer拆分成多个reducers

    (1)、引入combineReducers

    import { combineReducers, createStore } from "redux";

    (2)、合并多个reducers

    let reducer = combineReducers({ todoReducers, tabReducers })

    (3)、创建store

    let store = createStore(reducer)

     

    1、reducer.js
    
    const defaultState={
        n:10
    }
    
    export default (state=defaultState,action)=>{
    
          return  state;
    }
    
    
    2、inforeducer.js
    
    const defaultState={
          name:"张三",
    n:20 } export default (state=defaultState,action)=>{ return state; } 3、store index.js import {createStore,combineReducers} from “redux” import reducer from "./reducers/reducer" import inforeducer from "./reducers/reducer" let reducer = combineReducers ({ reducer inforeducer }) let store = createStore(reducer) export default store;
    4、APP.js
    let {n} =this.state.reducer

    注意:在使用state的时候要注意使用的谁的state  

    总结一下:

         redux数据传递流程

            1、通过store.getState获取到store中的数据,在页面进行渲染

            2、当组件中需要修改数据的时候通过调用store中的dispatch方法来将acton传递给store 但是store偷偷给了reducer

            3、reducer的函数中接收到action,做业务逻辑处理 处理完毕后返回新的state

            4、时间订阅  通过store中的subscribe方法来做事件的订阅,当数据发生改变的时候组件中的数据更新

      

     

  • 相关阅读:
    POJ 2533 Longest Ordered Subsequence 最长上升子序列
    HDU 2059 龟兔赛跑 动态规划
    POJ 1328 Radar Installation 贪心
    动手动脑课后作业
    学生信息添加界面(连接数据库实现学生信息的存储)
    回文递归小测总结
    Java开学测试学生成绩管理系统
    动手动脑(第六周)
    Java课后总结原码、补码、反码
    如何在静态方法中访问实例对象
  • 原文地址:https://www.cnblogs.com/ray123/p/10922370.html
Copyright © 2011-2022 走看看