React native React Native和Flatter之间有什么区别?

React native React Native和Flatter之间有什么区别?,react-native,flutter,React Native,Flutter,和技术上有什么区别 这两种技术似乎做了相对相同的事情,而Flatter甚至承认它的灵感来自React: 当它们列出相同的特性并具有几乎相同的语法时,这一点更加明显(StatefulWidgetvsComponentclass) 与AngularDart类似,AngularDart是AngularDart的一种Dart实现;假设颤振是React的Dart实现是否正确?在体系结构上,React Native(RN)和颤振非常相似 颤振所谓的“小部件”严格等同于React的“组件”。这就是颤振的意思,

和技术上有什么区别

这两种技术似乎做了相对相同的事情,而Flatter甚至承认它的灵感来自React:

当它们列出相同的特性并具有几乎相同的语法时,这一点更加明显(
StatefulWidget
vs
Component
class)


与AngularDart类似,AngularDart是AngularDart的一种Dart实现;假设颤振是React的Dart实现是否正确?

在体系结构上,React Native(RN)和颤振非常相似

颤振所谓的“小部件”严格等同于React的“组件”。这就是颤振的意思,当它说它的灵感来自反应

它们之间的区别在于框架的其他方面:

解释Javascript与编译Dart Flatter使用Dart,这是一种类型化语言,提供“即时”(JIT)和“提前”(AOT)编译(包括树抖动)

在开发中,Flatter使用JIT编译来实现热重新加载。对于生产构建,它使用AOT编译以获得更好的性能


React Native使用Javascript,并通过称为JSX的语法进行了增强

JSX是另一种语言,它编译成JS,然后在运行时进行计算

桥接到本机与完全重写 React native是在native的基础上构建的

在React Native中使用按钮或文本时,您正在操作用于本机Android/iOS应用程序的官方对象

我们可以考虑Android/iOS之间的一种通用语言来声明布局,但从根本上说,应用程序与潜在的不一致性不同。 这不是真正的跨平台。但同时,它允许更好地与本机元素进行互操作


颤振恰恰相反。颤振的目标是使用尽可能少的本地元素

颤动请求到OS窗口,然后使用DART和Skia(它是C++图形引擎)完全管理它的内容。 它有几个含义:

  • 所有的UI逻辑都必须通过Flatter重新实现。无论是滚动、触摸事件、动画
  • 应用程序完全是用Dart编写的,甚至可以深入到底层。这意味着无论平台是什么,执行的代码总是相同的
  • 任何可以运行Dart代码和创建窗口的东西都可能运行FLUTER,应用程序应该不会有什么变化。因此,web正在进行()并且桌面的基本支持可用

在某种程度上,我们可以将Flutter与webview/游戏引擎进行比较,但针对休闲应用程序进行了优化。

Remi已经有了一些优点。我还有一个

使用桥接器进行解释-与本机和无桥接器进行比较 不管名称可能意味着什么,React本机应用程序不是编译为本机代码的。React本机应用程序在运行时解释Javascript代码,React本机应用程序中的组件更新通过桥到达本机视图对应项。这可能会让事情慢一点,成为一个瓶颈

相反,Flatter应用程序(在发布模式下)编译为本机代码不需要桥接来操作UI。这反过来,至少在理论上,将更加有效——不需要往返于祖国进行简单的UI更改。更不用说release Flatter代码是本机编译的,并且没有涉及到解释器

跳舞猴子,跳舞 现在我们知道,发布模式颤振应用程序没有解释器,也不需要用于UI操作的桥接器,让我们先看看这两个东西到底是什么

我们将通过一个高度假设的示例应用程序来实现这一点。我们的React原生应用程序有一个按钮,可以让猴子在屏幕上跳舞。在React Native中,我们的按钮和跳舞的猴子组件是用Javascript和React编写的

口译员 由于Javascript在Android或iOS上不是一流语言,因此您的React本机应用程序包含一个Javascript解释器,该解释器在运行时解释您的Javascript代码。如果没有解释器,您将无法使用Javascript编写应用程序-即使是简单的
console.log('Hello World!')
也无法工作

根据,在“大多数情况下”,Javascript代码将使用JavascriptCore进行解释

桥 在引擎盖下,React Native使用本机Android视图和iOS UIView在屏幕上显示UI组件(如跳舞的猴子)。但是,由于Android和iOS SDK的UI部分不使用Javascript,因此不能单独使用Javascript让猴子跳舞

这就是桥梁发挥作用的地方。桥的另一边是用Javascript编写的React本地组件和逻辑。另一方面,我们有一个主机Android/iOS应用程序,可以将本地视图呈现到屏幕上。 从现在起,让我们把这座桥的两边称为Javascript之地和本土

那么,当用户点击我们的“跳舞,猴子,跳舞!”按钮时会发生什么

  • 本机Android/iOS视图发送一个onclick事件,该事件越过桥到达Javascript区域
  • 我们用Javascript编写的onclick侦听器被调用。这是一个简单的调用,用于切换组件内部的布尔值。类似于
    setState((){ismonkeydinging=true})
    或类似的东西
  • React看到有些事情发生了变化。它提供了一个更新的UI元素表示,其中有一个跳舞的猴子。该表示只是一个普通Javascript对象树,用于描述UI的更新状态
  • Javascript o