JavaScript 框架大战已结束,赢家只有一个( 二 )


从理论上讲 , 这个问题在版本 3 中得到了解决 。但是 , 将自己的错误归咎于他人并不适合社区 。
 
SvelteJS 
它是战争中不断壮大的竞争者 , 并且正在做出巨大的承诺 。它声称主要优势是将组件转换成命令式语言 , 根据他们的说法 , 它比 React 采用的声明性语言更好 。
 
<script>let world = "World";</script><div>Hello {world}!</div> 复制代码
 
毫无疑问 , 它使用起来更简单 , 但是转换为命令式以及由此产生的组件并不像看起来那么容易预测 。在某些情况下 , SvelteJS 无法正确检测变化 。发生这种情况时 , 状态可能已经被破坏了 , 而视图却未正确更新 。这个问题引起了很多关注 , 所以很难证明 SvelteJS 中的任何项目都是合理的 。

JavaScript 框架大战已结束,赢家只有一个

文章插图
 
https://twitter.com/drpicox/status/1496461071334490112
 
StencilJS 
嗯 , 从技术上讲 , 它不是一个框架 , 尽管它是 。StencilJS 允许编写组件 , 并将其转换为其他框架 。如今 , 它将组件转换为 Angular、React、Vue 和 WebComponents 组件 。
 
import { Component, Prop, h } from '@stencil/core';@Component({tag: 'app'})export class MyComponent {@Prop() world: string;render() {return (<p>Hello {this.world}</p>);}} 复制代码
 
但是 , 这个类有一些奇怪的地方 。它和另一个东西很相似 , 对吧?
 
Mitosis 
你可能没有听说过它 , 但正是因为它让我写下了这篇文章 。Mitosis 是由 Angular 的创建者 Misko Hevery 编写的最新框架 。没错 , 它是 Misko 在 Angular 之后创建的另一个框架 。
 
import { useState } from "@builder.io/mitosis";export default function MyComponent(props) {const state = useState({world: "World",});return <div>Hello {state.world}!</div>;} 复制代码
 
Mitosis 与 StencilJS 具有相同的目的 , 它将其组件转换为许多框架 。顺便说一句 , 代码是不是与其他框架有点像?
 
React 
它是最古老的现代框架之一 , 在 npm 存储库中已经有 10 多年了 。尽管它已经发生了很大的变化 , 但它仍然与以前的大多数版本兼容 。所有的变化都变得更好了 。有人说 , 带有钩子的 React 甚至已经创建了一个更好的框架 。
 
import { useState } from "react";export default function HelloWorld() {const [world] = useState("World");return <div>Hello {world}!</div>;} 复制代码
但 React 做的最棒的不是它有钩子或任何可见的功能 , 而是推动了 JavaScript 的最新标准 , 并推动了 JSX 的发展 。React 不再是一个框架 , 也许它从来都不是 , 它只是一个库 。它在推动标准时做得如此努力 , 以至于最终将自己从用户代码中移除了 。
 
赢家是... 
JSX 。好吧好吧 , React , 但不是 React 本身 , 而是其背后的哲学 。React 本身就是一个库 , 但它可以被许多其他库所取代 , 比如 Preact 或 React Native 。但是如果你仔细观察 , StencilJS 或 Mitosis 与 React 非常相似 , 这不是巧合 , 这是因为:
 
“最好的框架是将自己从用户代码中删除的框架 。“ ——勇于改变 , 才是更明智的决定
 
React 大量利用 JavaScript 和 JSX(嵌入了 XML 的 JavaScript) , 用户代码是 React 无关的 , 只需进行很少的调整 , 几乎完全相同的代码就可以在其他框架中运行 。因此 , 毫无疑问 , React 是框架之战的赢家 。因为它不是用户代码中的框架 。
 
注意:我最近发现了一个视频:
https://www.youtube.com/watch?v=4anAwXYqLG8 。他将 React 描述为一个尽可能降低影响的库 , 这正是我编写本文的原因 。我感到很沮丧 , 因为我花了 8 年时间才理解它 。这就是为什么有这么多框架看起来像 React 的原因 , 因为它不是 React , 它是 JavaScript 。


推荐阅读