Redux Flow

302 阅读2分钟

Redux是什么? Redux如何工作? 中间件是什么?为什么需要中间件? React redux是什么,如何工作

redux是JavaScript状态容器,提供可预测化的状态管理。

什么是状态容器,如果只是单纯的简单页面数据存在state中,如果项目增加需要跨层级共享,放在一个地方统一管理数据。

Redux工作流

使用顺序:

  1. createStore 创建store
  2. reducer初始化、修改状态函数
  3. getState 获取状态值
  4. dispatch提交更新
  5. 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:

  1. Provider 为后代组件提供store
  2. connect为组件提供数据和变更方法
  3. 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>
    );
}