Redux基本原理及如何使用


定义:

  Redux是状态统一管理容器,为了解决不同组件之间状态不统一的问题。

特点:

  Redux的数据流动是单向的,形成一个闭环循环。

如上图:我们从组件作为切入点,组件的状态值从Store获取到,如果想改变Store中的值,禁止直接逆向操作,只能先通过dispatch方法传入对象类型的action,再将action传入reducer函数中,reducer函数是唯一可以操作store中state值的角色,它包含两个参数,第一个state, 第二个action, 如此循环形成一个单向闭环,这就是单向数据流。

实操:

一:创建一个react项目demo 

npx create-react-app redux_demo

二:打开项目,运行项目

cd .\redux_demo\
npm start

三:安装Redux

npm install redux --save-dev

四:将根目录下的index.js文件中的代码替换为下面代码

import { createStore } from 'redux';

function default_reducer(state = {}, action) { // 初始化state为空对象
    switch (action.type) {  // 定义action
      case 'setName':
        return {
          ...state,
          name: action.value
        }
      default: 
        return state
    }
};

let store = createStore(default_reducer); 

console.log('初始值', store.getState());
console.log('///////')

store.dispatch({              // 修改值
    type: 'setName',
    value: 'bar' 
})   
console.log('修改后的state值', store.getState());

五:添加监听state变化的订阅功能

import { createStore } from 'redux';

function default_reducer(state = {}, action) { // 初始化state为空对象
    switch (action.type) {  // 定义action
      case 'setName':
        return {
          ...state,
          name: action.value
        }
      default: 
        return state
    }
};

let store = createStore(default_reducer); 

store.subscribe(() => {   //监听到state修改后会自动执行
  console.log('当前state值', store.getState());
});


store.dispatch({              // 修改值
    type: 'setName',
    value: 'bar' 
})  

store.dispatch({              // 修改值
  type: 'setName',
  value: 'others' 
})