@wordpress/redux-routine

用于生成器协同程序的Redux中间件。

安装

如果您还没有可用的节点,请安装它。

使用将模块安装到项目中净现值法:

npm安装@wordpress/redux-routine

@wordpress/redux-routine同时利用了Promises和Generators这两个JavaScript语言的现代功能。如果需要支持较旧的浏览器(Internet Explorer 11或更早版本),则需要提供自己的polyfill。

用法

默认导出@wordpress/redux-routine是一个函数,给定一个控制处理程序对象,它返回一个Redux中间件函数。

例如,考虑一个常见的情况,我们需要发出网络请求。在创建中间件时,我们可以将网络请求定义为控制处理程序。

从“redux”导入{combineReducers、createStore、applyMiddleware};从“@wordpress/redux-routine”导入createMiddleware;const中间件=createMiddleware({异步FETCH_JSON(操作){const响应=等待window.fetch(action.url);return-response.json();},} );功能温度(状态=空,动作){开关(action.type){案例“设置温度”:返回动作温度;}返回状态;}常量减速机=组合减速机({温度});const store=createStore(reducer、applyMiddleware(中间件));函数*retrieveTemperature(){const结果=产量{type:“FETCH_JSON”,url:“https://”};return{type:'SET_TEMPERATURE',TEMPERATURE:result.value};}store.dispatch(检索温度());

在本例中,当我们发送恢复温度,它将触发控制处理程序生效,发出网络请求并将结果分配给结果变量。只有一次
请求已完成操作创建者是否继续返回设置温度操作类型。

美国石油学会

违约

创建一个Redux中间件,给定一个控件对象,其中每个键都是要对其执行操作的操作类型,值是一个函数,该函数返回一个承诺,该承诺将在继续执行操作时解析,或者返回一个值。值或已解决的承诺值是在收益分配的返回值上分配的。如果控件处理程序返回未定义的值,则不会继续执行。

参数

  • 控制 记录<字符串,(值:import('redux')。AnyAction)=>承诺<boolean>|boolean>:控件处理程序的对象。

退换商品

  • 导入(“redux”)。中间件:协同运行时

动机

@wordpress/redux-routine与其他类似的基于发生器的Redux副作用解决方案有许多相同的动机,包括redux-saga公司它的不同之处在于由于其极简主义而不那么固执己见。它不包括默认控件,不提供围绕分割逻辑流的工具,也不包括任何现成的错误处理。这是为了提高开发人员的可接近性,他们寻求在应用程序中引入异步或有条件的延续流,而不需要陡峭的学习曲线。

主要动机包括:

  • 可测试性:由于动作创建者生成普通动作对象,因此可以在测试中轻松替换它们的解析行为。
  • 可控的灵活性:可以在不牺牲动作类型的表达性和意向性的情况下实现控制流。其他解决方案(如thunks或promises)促进了最终的灵活性,但牺牲了通过动作类型和附带实现之间的深度耦合表现出来的可维护性。
  • 通用领域语言表示数据流:由于控件是集中定义的,因此需要开发团队有意识地决定何时以及如何添加新的控件处理程序。

测试

由于您的动作创建者将返回一个普通动作对象的可迭代生成器,因此它们对测试来说是微不足道的。

再次考虑我们上面的示例:

函数*retrieveTemperature(){const结果=产量{type:“FETCH_JSON”,url:“https://”};return{type:'SET_TEMPERATURE',TEMPERATURE:result.value};}

测试用例(使用节点的断言内置模块)可以写为:

从“assert”导入{deepEqual};const操作=检索温度();deepEqual(action.next().value{类型:“FETCH_JSON”,url:“https://”,} );const-jsonResult={value:10};deepEqual(action.next(jsonResult).value{type:'设置温度',温度:10,} );

如果您的操作创建者没有将生成的结果赋给变量,您还可以使用阵列起始位置根据动作创建者的结果创建数组。

参与此包

这是古腾堡项目的一部分。该项目组织为单回购。它由多个独立的软件包组成,每个包都有特定的用途。此monorepo中的包发布到净现值法并由使用WordPress(文字出版社)以及其他软件项目。

要了解更多关于对这个包或古腾堡整体贡献的信息,请阅读该项目的主要内容投稿人指南.