返回专题

专题 2018

redux-vs-generator

Reference 相关笔记

GeneratorJavaScriptRedux

当我们编写普通函数时,链中的下一个函数仅在前一个函数完成之后开始执行。对于生成器(实际上是任何协程),执行操作都可以与其他函数交叉执行或暂停。这使得将不同部分组合起来会更加容易。

https://codesandbox.io/s/redux-vs-generator-oe5li?fontsize=14&hidenavigation=1&theme=dark

Reference

Async Generators 作为状态管理的替代方案

在 freeCodeCamp 社区阅读 原文 。 Async Generators (异步生成器) 是一个简单但功能强大的特性,它现在已经是 JavaScript 的一部分,它解锁了许多新的工具来改进软件结构,使其更加灵活、易扩展、更易组合。 使用 Async Generators ,将不再需要组件状态、状态管理工具、生命周期方法,甚至也不需要 React Context 、 Hooks 、 Suspense APIs,它将简化开发,管理和测试。 与状态管理方法不同的是,异步生成器将异步转换变得更加可控而无害(它只在生成器作用域里有效)。 这个思路有函数式编程的背景。 像时间旅行器、通用应用程序也是可用的。 这篇文章使用了 React 和 JavaScript ,但是这项技术对于其他框架或拥有生成器(协程)的编程语言来说都是适用的。 本文的大部分内容都是关于异步生成器的,我只在最后简短介绍我自己的工具。 我们首先看看 Redux 的由来: 我们之所以觉得这很复杂,不好处理,是因为我们把两个对于人类的思维来说难以理解的概念混合在一起,这两个概念是突变和异步性。 我称之曼妥思和可乐现象--两者分开时各自都运行得很好,但放在一起使用,就会造成混乱。 Redux 和其他的状态管理工具主要侧重于约束和控制数据的突变。异步生成器可以处理异步,如果变异仅在特定的生成器范围内可见,则更安全。 所有常见的状态管理技术可以分为两大类。 第一类是维护数据关系图,通过处理器传播改变--React组件状态、MobX、RxJS。维护这些关系是一项复杂的任务。底层库通过管理订阅,优化处理器执行顺序,对它们进行批处理来负责部分复杂的任务,但有时使用起来仍然令人困惑,通常需要进行硬微调,例如,使用 shouldComponentUpdate 方法。 另一种方法是将突变限制为仅有单个单元(storage),例如 Redux。这需要更小的并且带有更少魔法功能的库。说它是库,其实它更像是一种模式。不过,这种程序会更加冗长,破坏数据的封装。虽然有很多模式或包装器可以解决这个问题,但是它们使用单个单元的方法更类似于基于图的方法。 本文介绍的技术和 Redux 都是基于事件源模式,它们有许多相似之处,它也会为具有副作用的操作提供封装数据和使用同步来确定执行顺序。 这种方法也可以抽象地视为依赖图,但是变化是反向传播的,从它的根节点朝它生成树的子节点。在每一个节点处,我们需要检查传播是否应该传给子节点。这样使调度算法非常轻量级并且易于控制。它不需要引入任何库,仅基于JavaScript内置功能。 让我们首先引入 Redux
https://zhuanlan.zhihu.com/p/91468149

返回首页
上一篇Redux 原理下一篇条件显示情况下 ref 的取值

Discussion

留言与讨论

想法、补充和不同意见都欢迎。