React知识点整理-Redux(三)

710 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

React中间件

在我们之前的demo中,redux保存的counter是我们本地定义的数据。在真实的开发过程中redux保存的数据需要我们从求服务器异步请求获取。那么我们该如何将网络请求的数据存储到redux中呢?

传统方法

传统的做法通常是在生命周期方法中进行网络请求,如下图所示(出自coderwhy):

image.png 我们在componentDidMount()中进行网络请求然后将得到的数据通过dispatch action将数据放入redux.如下图所示:

image.png

中间件

在上述代码中我们将网络请求放在组件的生命周期当中进行处理,事实上网络请求也属于state管理的一部分。更好的做法是我们将它放到redux中进行处理,那么我们如何在redux中进行异步操作呢?中间件会帮我们处理它。

image.png

redux-thunk

默认情况下dispatch(action)中action需要我们传入一个对象,但是redux-thunk的引入使得我们可以将函数传入dispatch()。

  1. 首先我们安装redux-thunk:yarn add redux-thunk
  2. 然后引入React的applyMiddleware,通过字面意思我们也明白它是用来结合多个Middleware中间件,他会返回一个enhancer;
import {applyMiddleware} from 'redux';
import ThunkMiddleware from 'redux-thunk';
const enhancer = applyMiddleware(ThunkMiddleware)

然后我们在createStore()函数中传入enhancer,这样我们就完成了thunk中间件的引入。

image.png

那么我们就可以试着在dispatch中传入一个函数,在使用getHomeMulidataAction()的时候会传入dispatch、getState两个参数,其中dispathc用于进行派发操作如demo中的为banners、recommends数组赋值。getState就是store的getState在网络请求中如果你需要用到原来redux中的数据可以进行使用。

image.png

redux-saga

redux-saga是另一个比较常用的中间件,它的使用比较灵活但是它的上手难度也是更大。

  1. 首先我们安装redux-saga:yarn add redux-saga
  2. 然后我们通过创建中间件的函数,创建中间件,并且放到applyMiddleware函数中;启动中间件的监听过程,并且传入要监听的saga;

image.png

其中composeEnhancers主要是用来使用redux-devtools工具,以此对项目的state进行监听和跟踪。

我们在项目中新建saga.ja文件,相关解释可以查看代码注释:

image.png 这样关于Redux的部分就整理完了,这些只是最基础的使用,进阶的或者更详细的讲解可以自行学习,最后我还是推荐coderWhy的课程,不是广告真心推荐。