任何现代网站或浏览器应用程序(SPA,PWA,任何其他三个字母)的核心都是其状态。
我们可以任意争论哪个更好-React,Vue,Svelte,Angular,我们可以继续使用jQuery,但实际上并不是那么重要。这是我们看到的应用程序的一部分-它的“肌肉”和“皮肤”。但是,您的思维方式-使用什么术语,使用什么机制甚至在您的头脑中可视化数据在应用程序中的“流动”方式-都来自其框架。来自国家经理。
还记得几年前,我们厌倦了JavaScript吗?现在,我看到大量的人对州管理人员感到厌倦。Redux?是的,是的,是的。RxJS?也是。MobX?如果很简单-该死,为什么在文档中有trap.html页面?
答案是“为什么对许多人这么难”,但是首先您需要准确地表述问题。
选择州经理-我们选择一种思维方式。现在有很多选择,但是最受欢迎的方法分为三类:
助焊剂/类似Redux的:具有操作和减速器的全局存储库。有相当多的人,但我会提到终极版,效应,Storeon,未说明,并Reatom自己。这些不是“最好的最好的”,而是“最多样化的”。列表中的所有解决方案都具有独特之处和不寻常之处,您可以从中获得各种有趣的想法。
这种方法主要是必须的(Thuring-complete)和全局的。
观测物和管道。该组中当今最受欢迎的解决方案是RxJS和MobX。鲜为人知的-开菲尔(Kefir),培根(Bacon),CycleJS。顺便说一句,斯维尔特(Svelte)也属于此列表。它们在开发人员经验方面都非常不同,但是从根本上讲,它们仅在一件事上有所不同:MobX,Svelte等可以用通常的“触发什么”图在拓扑方面进行描述,但是RxJS不是,它的图是多维和“奇怪的循环”可能会出现在其中在可观察物中传输可观察物。一方面,它使其功能更强大,另一方面,其功能也更加复杂。剧本也有类似的故事。他们发现他的类型系统是Thuring-complete。接下来的唯一事情是它可能在验证步骤中冻结,并且他们为工作增加了时间限制。
这听起来可能很奇怪,但是总的来说,这类解决方案往往是局部的,即席的和声明性的 -但不会切断使用任意逻辑的能力。
, - , , , , “” . , Lodash, Ramda, io-ts. - LISP JS, — -- “”, , .
GraphQL . Apollo Relay — , . Falcor — GraphQL Netflix, GunDB PouchDB. , Redux, MobX, RxJS . “” GraphQL. , . 100% ( )
, . — , ; , - . .
: “” “” 100% : redux- , , RxJS — . JS , , .
: - ID ID, — . (), — .
. - . , , , "state of js” .
.
.
, , . , — , . , .
— , , . , , — GraphQL . , , .
, - .
SPA , : , , SQL- ; .
Rails, , .
, , ( ) — API , .
:
- : . , , , .
- : statechart. — . — observables (RxJava, RxRuby, RxSwift, RxBrainfuck — ) . — - , , - .
. , , . — . , , , , — . , , - . — , .
— - , . - , . — , , , .
. , , , corrupted. : , DTO. . — LISP-. : , .
— . , — , , , — - , . , , . : - — , . , , CRDT-. — .
:
.
— , , — , , . , . , , . await getBlogPost(id)
, : @gql("blogPost(id){...}") class extends Component
, — , .
. . ImmutableJS, Object.freeze, readonly Record & Tuple stage 1 proposal. . - shared worker.
, — , . XState , ( ), . , . .
这两个世界之间的任何交互都应该是显式的,并在代码中直接加以区分,以免在代码审查期间偶然发生,最重要的是-发生在用户域而不是库中。
您不应该选择特定的解决方案,但是对于我的新项目,我将使用GraphQL + Apollo来存储知识,对于状态管理-Xstate + RxJS,幸运的是,他们彼此是朋友。
不必担心将所有内容塞入一个解决方案中。您不需要它。