# Redux状态管理的基本流程
# Redux状态管理库
Redux就像我们前面学习Vue中的Vuex或Pinia是一样的,专门处理状态管理的。只不过Redux比较独立,可以跟很多框架结合使用,不过主要还是跟React配合比较好,也是最常见的React状态管理的库。
官网网站:https://redux.js.org/
需要安装才能使用,即:npm i redux
要想很好的理解Redux的设计思想,就要看懂下面这张Redux基本流程图。

redux基本流程图
在图示当中,各部分的分工如下:
- State:用于存储共享数据
- Reducer:用于修改state数据的方法
- Middleware:用于扩展一些插件来完成异步的操作
- Dispatch:用于触发Reducer或Middleware
下面就来演示一下Redux代码的基本使用,首先在/src文件夹下创建/store文件夹和/store/index.js状态管理的配置文件。
import { createStore } from 'redux'
function counterReducer(state={count: 0}, action) {
switch(action.type){
case 'inc':
return {count: state.count + 1}
default:
return state;
}
}
const store = createStore(counterReducer)
export default store
这样store对象就可以在其他组件中进行使用了,例如在
import React from 'react'
import './Foo.scss'
import store from '../../store'
import { useState } from 'react'
export default function Foo() {
const [count, setCount] = useState(store.getState().count)
const handleClick = () => {
store.dispatch({
type: 'inc'
})
}
store.subscribe(()=>{
setCount(store.getState().count)
})
return (
<div>
<button onClick={handleClick}>修改count</button>
Foo, { count }</div>
)
}
这段代码中的store.getState().count
就是用于获取到count的值。那么如何进行count的修改呢?需要调用dispatch方法来触发对应的counterReducer函数。
虽然count值确实被修改了,但是页面并没有同步发生改变,这主要就是因为需要通过subscribe
方法进行监听,在监听到count改变后,再去触发对应的重渲染。
这样页面就会跟着方法变化了,不过这种做法非常的不方便,所以下一个小节会使用一个第三方模块react-redux
来简化对Redux的使用。