redux-effect
npm install --save redux-effect
通过redux中间件的方式使async方法可以在redux中使用。
如果你使用redux-saga,应该非常容易上手redux-effect。effect概念正是来自于saga,其本身就是一个普通的async函数,你可以在此处理一些异步逻辑,管理reducer。
首先我们定义一个简易的reducer,没有特殊需求的话,reducer只做一件事,就是将action中的参数保存起来,很简单有木有。
function commonReducer(state = {}, action) {
switch (action.type) {
case 'common/save':
return {
...state,
...action.payload,
};
default:
return state;
}
}
接着定义一个简陋的effect方法,用于从服务端获取一些数据,并将其存入reducer。
- effect是一个普通的async方法。
- 每个effect的第一个参数就是action,我一般将参数放在payload中。
- effect的第二个参数是store对象,可以拿到dispatch和getState。
- dispatch一个新的action,可以触发reducer,或者发起另一个effect。
- getState则用于获取任意reducer已有的数据。
async function test ({ payload }, { dispatch, getState }) {
const data = await fetch()
await dispatch({ type: 'common/save', payload: data })
}
定义好reducer和effect,就可以设置store了,参考代码如下:
import effect from 'redux-effect';
const effects = {
'common/test': test
}
export const store = (initialState = {}) => {
const temp = createStore(
reducer,
initialState,
composeWithDevTools(applyMiddleware(effect(effects))),
);
return temp;
};
然后就可以愉快的使用dispatch一个action来完成异步操作啦。
const { dispatch } = this.props;
dispatch({
type: 'user/getUserInfo',
});
Keywords
redux-effect的更多相关文章
- [转] How to dispatch a Redux action with a timeout?
How to dispatch a Redux action with a timeout? Q I have an action that updates notification state of ...
- Redux:从action到saga
前端应用消失的部分 一个现代的.使用了redux的前端应用架构可以这样描述: 一个存储了应用不可变状态(state)的store 状态(state)可以被绘制在组件里(html或者其他的东西).这个绘 ...
- Redux进阶(像VUEX一样使用Redux)
更好的阅度体验 前言 redux的问题 方案目标 如何实现 思考 前言 Redux是一个非常实用的状态管理库,对于大多数使用React库的开发者来说,Redux都是会接触到的.在使用Redux享受其带 ...
- 聊一聊 redux 异步流之 redux-saga
让我惊讶的是,redux-saga 的作者竟然是一名金融出身的在一家房地产公司工作的员工(让我想到了阮老师...),但是他对写代码有着非常浓厚的热忱,喜欢学习和挑战新的事物,并探索新的想法.恩,牛逼的 ...
- redux源码解析-函数式编程
提到redux,会想到函数式编程.什么是函数式编程?是一种很奇妙的函数式的编程方法.你会感觉函数式编程这么简单,但是用起来却很方便很神奇. 在<functional javascript> ...
- redux的源码解析
一. redux出现的动机 1. Javascript 需要管理比任何时候都要多的state2. state 在什么时候,由于什么原因,如何变化已然不受控制.3. 来自前端开发领域的新需求4. 我们总 ...
- [React] 14 - Redux: Redux Saga
Ref: Build Real App with React #14: Redux Saga Ref: 聊一聊 redux 异步流之 redux-saga [入门] Ref: 从redux-thun ...
- 003-and design-dva.js 知识导图-02-Reducer,Effect,Subscription,Router,dva配置,工具
一.Reducer reducer 是一个函数,接受 state 和 action,返回老的或新的 state .即:(state, action) => state 增删改 以 todos 为 ...
- Vuex、Flux、Redux、Redux-saga、Dva、MobX
https://www.jqhtml.com/23003.html 这篇文章试着聊明白这一堆看起来挺复杂的东西.在聊之前,大家要始终记得一句话:一切前端概念,都是纸老虎. 不管是Vue,还是 Reac ...
- react系列(六)Redux Saga
在Redux中常要管理异步操作,目前社区流行的有Redux-Saga.Redux-thunk等.在管理复杂应用时,推荐使用Redux-Saga,它提供了用 generator 书写类同步代码的能力. ...
随机推荐
- Razor语法(四)
1. @代表开始一个Razor代码块,Razor会自动匹配代码中的花括号,比如@if(p.Active){<li>@p.Name</li>} 2. @{code}标识一个Raz ...
- C# 秒数转日期_由秒数得到日期几天几小时_当前日期时间,转换为秒
///<summary> ///由秒数得到日期几天几小时... ///</summary ///<param name="t">秒数</para ...
- Windows Vista如何让梦幻桌面支持更多格式
Windows Vista 梦幻桌面(DreamScene)到底能不能支持除了Mpeg/mpg以外的格式? 很多人说梦幻桌面的视频格式有限,像AVI.RM.RMVB就不能做成梦幻桌面!也有很多朋友着急 ...
- 导出oracle 到 mysql的解决办法
导出oracle 到 mysql的解决办法 使用sqluldr2 命令如下sqluldr2 USER=weibh/1234@dydb file=c:\1.txt sql=sql.sql FORMA ...
- 更新node版本
步骤如下:1.查看当前的node版本 node -v 2.清除npm当前缓存信息 npm cache clean -f 3.执行下载node npm install -g n 4.下载成功后执行安装 ...
- 《Java并发编程的艺术》读书笔记:等待/通知机制
看这本书之前,对wait和notify认识大概就是,调用wait的线程A堵塞之后,一旦另外有线程调用notify方法.线程A会立马从wait方法处返回.看完这本书后.发现自己的认识实在太肤浅了.... ...
- struts2 ValueStack的作用
Value Stack的作用: 1. 可以作为一个数据中转站 2. 用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合.我用得最多的就是数据 ...
- SSH面试题目
一简答 spring工作原理 为什么要用spring 3.请你谈谈SSH整合 4.介绍一下Spring的事务管理 5.Struct2基本流程 6.在Hibernate应用中Java对象的状态有哪些? ...
- swipeRefreshLayout与webview滑动冲突
遇到这么个bug,webview使用swipeRefreshLayout时,下拉时事件不会被webview捕获,而是执行swipeRefreshLayout的刷新,网上一大堆一大堆的解决办法,都是什么 ...
- HDU 5303 Delicious Apples(思维题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...