Redux是什么? Redux如何工作? 中间件是什么?为什么需要中间件? React redux是什么,如何工作
redux是JavaScript状态容器,提供可预测化的状态管理。
什么是状态容器,如果只是单纯的简单页面数据存在state中,如果项目增加需要跨层级共享,放在一个地方统一管理数据。
使用顺序:
- createStore 创建store
- reducer初始化、修改状态函数
- getState 获取状态值
- dispatch提交更新
- subscribe变更订阅
中间件:
Redux只是个纯粹的状态管理器,默认只支持同步,实现异步任务比如延迟,网络请求,需要中间件的支持,比如我们使用的redux-thunk、redux-logger、redux-promise。
redux中的中间件提供的是位于 action 被发起之后,到达 reducer 之前的扩展点。 你可以利用 Redux middleware 来进行日志记录、创建崩溃报告、调用异步接口或者路由等等
中间件是一个函数,对store.dispatch方法的进行改造,在发出Action和执行Reducer这两步之间,添加了其他功能。
...middleware (arguments): 遵循 Redux middleware API 的函数。每个 middleware 接受 Store 的 dispatch 和 getState 函数作为命名参数,并返回一个函数。该函数会被传入被称为 next 的下一个 middleware 的 dispatch 方法,并返回一个接收 action 的新函数,这个函数可以直接调用 next(action),或者在其他需要的时刻调用,甚至根本不去调用它。调用链中最后一个 middleware 会接受真实的 store 的 dispatch 方法作为 next 参数,并借此结束调用链。所以,middleware 的函数签名是 ({ getState, dispatch }) => next => action
使用react-redux
每次都要重新调用render和getState太low了,想用更react的方式来写,需要react-redux的支持。
提供两个api:
- Provider 为后代组件提供store
- connect为组件提供数据和变更方法
- hook方法
useSelector 获取store state
useDispatch 获取dispatch
import React, {useCallback} from 'react'
import {useSelector, useDispatch} from 'react-redux'
export default fucntion ReactReduxHookPage({value}) {
const dispatch = useDispatch();
const add = useCallback(() => {
dispatch({type: 'ADD'});
}, []);
const count = useSelector(({count}) => count);
return (
<div>
<h3>ReactReduxHookPage</h3>
<p>{count}</p>
<button onClick={add}>add</button>
</div>
);
}