在redux中,action仅仅是携带了数据的普通js对象,actionCreator返回值是这个action类型的对象.
然后通过store.dispatch()进行分发,同步的情况下一切就都很完美,但是reducer无法处理异步的情况
这时候 我们就需要中间件middleware 来解决
//这里先介绍一个redux-thunk
我们现在有这样的一个需求
cinema和search 都需要请求后台的数据 这个数据还一样

`重复请求 不太好

我们优化一下 谁先取到 就先存起来 之后 就不用再发送请求
我们定好reducer

再定义actionCreator

actionCreator在这里是按照配定好中间件的情况下写的
这是个异步的请求 请求的结果 最终会是一个dispatch的对象
(这里面的dispatch参数可以更改成别的名字,这样写只是为了清除 中间件到底塞到这个异步的actionCreator 中 什么东西)
我们在cinema组件页面中导入actionCreator

然后 在组件被创建的时候 判断一下 是不是要请求数据

(如果redux的store中 这个list 没有数据 我们就将上面actionCreator的返回对象值 dispatch出去 进行 list的缓存)
之后我们在redux的store.js中配置中间件
先导入 安装好的redux-thunk的包

使用applyMiddleware()挂载中间件![]()
这样就完成了 如果没有这个store.js文件中的这两个配置 上面在actionCreator和cinema组件中的配置 就执行不了 而且会报错
以上就是redux-thunk中间件的完整使用
如果我们想在 cinema组件中 使用我们的redux的store中的数据 (在函数式组件中)
使用useState

并在useEffect中订阅 并 设置状态



记着在cinema组件销毁的 取消订阅 以避免重复订阅 都是在useEffect中完成
直接jsx使用就行

博客主要介绍了Redux中action和actionCreator的概念,指出reducer无法处理异步情况,需用中间件解决,以redux-thunk为例,阐述其使用方法,包括优化重复请求、配置中间件等,还提及在函数式组件中使用Redux store数据的操作。
274

被折叠的 条评论
为什么被折叠?



