博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打造Redux中间件
阅读量:6150 次
发布时间:2019-06-21

本文共 1937 字,大约阅读时间需要 6 分钟。

简单的

基本中间件:

const customMiddleware = store => next => action => {    if(action.type !== 'CUSTOM_ACT_TYPE') {        return next(action)        // 其他代码    }}

使用:

import {createStore, applyMiddleware} from 'redux';import reducer from './reducer';import customMiddleware from './customMiddleware';const store = createStore(reducer, applyMiddleware(customMiddleware));

store => next => action =>看起来很复杂有木有。基本上你是在写一个一层一层往外返回的方法,调用的时候是这样的:

let dispatched = null;let next = actionAttempt => dispatched = actionAttempt;const dispatch = customMiddleware(store)(next);dispatch({  type: 'custom',  value: 'test'});

你做的只是串行化的函数调用,并在每次的调用上传入适当的参数。当我第一次看到这个的时候,我也被这么长的函数调用串惊呆了。但是,在读了之后就理解是怎么回事了。

所以现在我们理解了函数调用串是怎么工作的了,我们来解释一下这个中间件的第一行代码:

if(action.type !== 'custom') {    return next(action);}

应该有什么办法可以区分什么action可以被中间件使用。在这个例子里,我们判断action的type为非custom的时候就调用next方法,其他的会传导到其他的中间件里知道reducer。

来点酷的

redux的里有几个不错的例子,我在这里详细解释一下。

我们有一个这样的action:

dispatch({  type: 'ajax',  url: 'http://some-api.com',  method: 'POST',  body: state => ({    title: state.title,    description: state.description  }),  cb: response => console.log('finished', response)})

我们要实现一个POST请求,然后调用cb这个回调方法。看起来是这样的:

import fetch from 'isomorphic-fetch'const ajaxMiddleware = store => next => action => {    if(action.type !== 'ajax') return next(action);    fetch(action.url, {        method: action.method,        body: JSON.stringify(action.body(store.getState()))    }).then(response => response.json())    .then(json => action.cb(json))}

非常的简单。你可以在中间件里调用redux提供的每一个方法。如果我们要回调方法dispatch更多的action该如何处理呢?

.then(json => action.cb(json, store.dispatch))

只要修改上例的最后一行就可以搞定。

然后在回调方法定义里,我们可以这样:

cb: (response, dispatch) => dispatch(newAction(response))

As you can see, middleware is very easy to write in redux. You can pass store state back to actions, and so much more. If you need any help or if I didn’t go into detail enough, feel free to leave a comment below!

如你所见,redux中间件非常容易实现。

原文地址:

转载地址:http://ehwfa.baihongyu.com/

你可能感兴趣的文章
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>