react学习之redux(四)
来源:互联网 发布:正版bim软件多少钱 编辑:程序博客网 时间:2024/06/13 09:28
之前的博客介绍了如何将容器组件连接到redux,下面介绍如何发送异步请求:
action
当调用异步API的时候,有两个非常关键的时刻,发起请求的时刻,和接收到响应的时刻
一般情况下,每个API请求都需要dispatch至少三种action,
- 通知reducer请求开始的action,切换isFetching标记,告诉UI显示进度条
- 通知reducer请求成功的action,reducer会把请求到的数据合并到state中去,并且重置isFetching,UI会隐藏进度条,显示接收到的数据
- 通知 reducer 请求失败的 action。对于这种 action,reducer 可能会重置 isFetching。或者,有些 reducer 会保存这些失败信息,并在 UI 里显示出来
同步 Action Creator
先定义几个同步的 action type 和 action creator
设计state结构
以官方demo帖子为例,每个帖子的列表都需要使用 isFetching 来显示进度条,didInvalidate 来标记数据是否过期,lastUpdated 来存放数据最后更新时间,还有 items 存放列表信息本身。在实际应用中,你还需要存放 fetchedPageCount 和 nextPageUrl 这样分页相关的 state。
如果你有嵌套内容,或者用户可以编辑接收到的内容,你需要把它们分开存放在 state 中,就像数据库中一样。在分页信息中,只使用它们的 ID 来引用。这可以让你始终保持数据更新
处理 Action
我们需要编写reducer,用到的是拆分reducer,然后用combineReducer方法组合
异步 Action Creator
如何把之前定义的同步 action creator 和 网络请求结合起来呢?标准的做法是使用 Redux Thunk middleware。你只需要知道一个要点:通过使用指定的 middleware,action creator 除了返回 action 对象外还可以返回函数。这时,这个 action creator 就成为了 thunk。使用thunk的好处是,可以在函数内部多次dispatch。我们使用了 applyMiddleware()引入thunkMiddleware
import thunkMiddleware from 'redux-thunk'import createLogger from 'redux-logger'import { createStore, applyMiddleware } from 'redux'import { selectSubreddit, fetchPosts } from './actions'import rootReducer from './reducers'const loggerMiddleware = createLogger()const store = createStore( rootReducer, applyMiddleware( thunkMiddleware, // 允许我们 dispatch() 函数 loggerMiddleware // 一个很便捷的 middleware,用来打印 action 日志 ))store.dispatch(selectSubreddit('reactjs'))store.dispatch(fetchPosts('reactjs')).then(() => console.log(store.getState()))thunk 的一个优点是它的结果可以再次被 dispatch
0 0
- react学习之redux(四)
- react学习之redux(一)
- react学习之redux(二)
- react学习之redux(三)
- react学习之redux(五)
- react项目学习笔记四(redux和redux的中间件redux-thunk的认识)
- React + Redux 最佳实践 学习之 redux
- 学习react-native之加入redux
- React + Redux 最佳实践 学习之 路由
- react-redux学习笔记-2-react-redux
- Redux 学习笔记(四)
- React-Native 之 redux 与 react-redux
- React-Native 之 redux 与 react-redux
- React与Redux学习总结(一)
- React && Redux 学习笔记(一)
- react && redux 学习笔记(二)
- React-Redux入门学习(三)
- react-redux 学习笔记
- 有关maven的总结
- typedef 的用法
- servlet的生命周期和执行原理
- 记录前端遇到过的坑
- shell
- react学习之redux(四)
- hdu 1010 Tempter of the Bone(DFS+奇偶性剪枝)
- 项目实际运用中用到spring的什么功能?
- 欢迎使用CSDN-markdown编辑器
- 关于友善之臂Tiny210电容屏移植tslib
- leetcode 二叉树的最小深度
- [DP 容斥] BZOJ 2669 [cqoi2012]局部极小值
- Fragment与Activity的通信:
- JavaScript中那些折磨人的面试题