框架范式
可变与不可变
Svelte的作者Rich认为React中最核心的问题是React一方面强调函数式渲染,而在Web里面,不管是DOM,BOM,CSS,JavaScript还是WebGL,都充满了内部状态和命令式风格的API,跟React函数式风格的抽象方式相差甚远。
而React Team的成员们,还在致力于不断地扩大两者之间的鸿沟。其结果就是,尽管React Hooks是一项具有开创性的优秀技术;然而,绝大部分React开发者,都难以理解和习惯React Hooks的一些机制。在这种情况下,React Team依然不认为这是React的问题,不试图解决困扰开发者们的反直觉事物。他们反而认为,需要教育React开发者,逐渐适应React的模式和思想,建立新的直觉。
并且,React Team对于过去4年多的教育成果感到满意:大部分React开发者都不会在render函数里操作DOM了,甚至有些开发者,已经忘记DOM API怎么用。React Team对未来新的教育,也抱有信心。Rich对此不以为然,他在分享的最后指出,Svelte框架与React不同,它致力于以符合人脑思维习惯的方式去构建UI。
函数式编程的根基Lambda Calculus是一个跟Turing machine计算能力等价的通用计算模型。而当前主流的计算机,是建立在Turing machine和冯诺依曼架构上的设备。其中充满了可变的状态和命令式的指令集。
所有编写的函数式代码,最终都是通过非函数式的方式,运行在我们的电脑上。那么,如果因为底层是有状态的,命令式的,就有了充分的理由去拥抱它。那函数式编程多年的发展,不可能存在。
Reactivity
一种是以Vue为代表的mutable + change tracking。即可变的数据结构,配合变更追踪,触发更新函数。另一种是以React为代表的immutability + referential equality testing。即不可变的数据结构,配合反复执行的渲染函数,以及在函数执行过程中,通过数据的引用相等性判断,找出变更部分,只应用变化的部分到UI上。
Sebastian文章开篇就表示,两种实践方式都有各自的权衡。因为mutable的方式,已经有其它框架们很好的研究,所以React Team决定专注于挖掘immutble的方向,看看最后能引领我们走到哪一步。