npm i redux
-
redux
是一个专门用于做状态管理
的JS库(不是react插件库)。 -
可以用在react, angular, vue等项目中, 但基本与react配合使用。
-
作用: 集中式管理react应用中多个组件
共享
的状态。
-
某个组件的状态,需要让其他组件可以随时拿到(共享)
-
一个组件需要改变另一个组件的状态(通信)
-
总体原则:能不用就不用, 如果不用比较吃力才考虑使用
=================================================================================
-
将
state
、action
、reducer
联系在一起的对象 -
如何得到此对象?
①import {createStore} from 'redux'
②import reducer from './reducers'
③const store = createStore(reducer)
- 此对象的功能?
①getState()
: 得到state
②dispatch(action)
: 分发action
, 触发reducer
调用, 产生新的state
③subscribe(listener)
: 注册监听, 当产生了新的state
时, 自动调用
-
用于
初始化状态
、加工状态
。 -
加工时,根据旧的
state
和action
, 产生新的state
的纯函数。
-
动作的对象
-
包含 2 个属性
①type
:标识属性, 值为字符串, 唯一, 必要属性
②data
:数据属性, 值类型任意, 可选属性
- 例子:
{ type: 'ADD_STUDENT',data:{name: 'tom',age:18} }
========================================================================
作用:创建包含指定reducer
的store
对象
-
作用:
redux
库最核心
的管理对象 -
它内部维护着:
①state
②reducer
- 核心方法:
①getState()
②dispatch(action)
③subscribe(listener)
- 具体编码:
①store.getState()
②store.dispatch({type:'INCREMENT', number})
③store.subscribe(render)
作用:应用上基于redux
的中间件(插件库),Middleware 可以让你包装 store 的 dispatch 方法来达到你想要的目的,例如可以让store分发异步函数。
作用:合并
多个reducer
函数
================================================================================
redux/store.js
该文件专门用于暴露一个store对象,整个应用只有一个store对象
// 引入createStore,专门用于创建redux中最为核心的store对象
import { createStore } from “redux”;
// 引入为Count组件服务的reducer
import countReducer from “./count_reducer.js”;
// 暴露store
export default createStore(countReducer);
redux/count_reducer.js
该文件是用于创建一个为Count组件服务的reducer,reducer的本质就是一个函数
reducer函数会接到两个参数,分别为:之前的状态(preState),动作对象(action)
import {INCREMENT,DECREMENT} from ‘./constant’
const initState = 0 //初始化状态
export default function countReducer(preState=initState,action){
// console.log(preState);
//从action对象中获取:type、data
const {type,data} = action
//根据type决定如何加工数据
switch (type) {
case INCREMENT: //如果是加
return preState + data
case DECREMENT: //若果是减
return preState - data
default:
return preState
}
}