出于好奇我开始学习React,并想知道React和React Native的区别-尽管使用Google找不到令人满意的答案。React和React Native似乎具有相同的格式。它们是否具有完全不同的语法?
出于好奇我开始学习React,并想知道React和React Native的区别-尽管使用Google找不到令人满意的答案。React和React Native似乎具有相同的格式。它们是否具有完全不同的语法?
ReactJS 是一个 JavaScript 库,支持前端网页和在服务器上运行,用于构建用户界面和Web应用程序。它遵循可重用组件的概念。
React Native 是一个移动框架,利用主机上可用的 JavaScript 引擎,允许您使用 JavaScript 构建不同平台(iOS、Android 和 Windows Mobile)的移动应用程序,使您能够使用 ReactJS 构建可重用组件并与本地组件通信。更多解释
两者都遵循 JSX 语法扩展。在幕后,它们编译为 React.createElement
调用。深入了解 JSX
两者都是由 Facebook 开源的。
这是 React 项目。
在 Facebook,他们发明了 React 来使用虚拟 DOM 模型,从而使 JavaScript 更快地操作网站 DOM,全面刷新比使用 React 虚拟 DOM 模型 的局部刷新慢。
正如您可能从这个视频中理解的那样,Facebook 并不是因为立即意识到局部刷新比传统刷新更快,才发明了 React。最初,他们需要一种方法来减少 Facebook 应用程序的重新构建时间,幸运的是这带来了局部 DOM 刷新。
React Native 只是 React 的一个结果。它是使用 JavaScript 构建本机应用程序的平台。
在使用 React Native 之前,您需要掌握 Java 或 Kotlin(用于 Android),以及 Swift 或 Objective-C(用于 iPhone 和 iPad)才能创建本机应用程序。
使用 React Native 可以在 JavaScript 中模拟本机应用程序的行为,最终您将获得平台特定的输出代码。如果需要进一步优化应用程序,则甚至可以将本机代码与 JavaScript 混合使用。
正如 Olivia Bishop 在视频中所说,85%的React Native 代码库可以在不同平台之间共享。这些通常是应用程序使用的组件和公共逻辑。
15%的代码是平台特定的。平台特定的 JavaScript 可以给平台带来独特风格(并在体验中产生差异)。
很酷的是,这个平台特定的代码已经编写好了,所以您只需使用它即可。
React:
React是一个用于构建用户界面的声明式、高效和灵活的JavaScript库。
React Native:
React Native让您只使用JavaScript构建移动应用程序。它使用与React相同的设计,使您能够从声明性组件中组合丰富的移动UI。
使用React Native,您不会构建“移动Web应用程序”,“HTML5应用程序”或“混合应用程序”。您将构建一个真正的移动应用程序,这个应用程序无法与使用Objective-C或Java构建的应用程序区分开来。React Native使用与常规iOS和Android应用程序相同的基本UI构建块。 您只需要使用JavaScript和React将这些构建块放在一起即可。
React Native可以让您更快地构建应用程序。 您可以即时重新加载应用程序,而不是重新编译整个应用程序。 使用热重新加载,您甚至可以在保留应用程序状态的同时运行新代码。 快来试试吧-这是一种神奇的体验。
React Native与使用Objective-C、Java或Swift编写的组件完美结合。 如果需要优化应用程序的某些方面,则可以轻松转换为原生代码。 如果需要的话,也可以直接使用原生代码构建应用程序的一部分,使用React Native构建应用程序的另一部分-这就是Facebook应用程序的工作方式。
基本上,React是用于Web应用程序视图的UI库,使用JavaScript和JSX,而React Native是在React之上的额外库,用于创建适用于和Android
设备的原生应用程序。
React代码示例:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('root')
);
React Native 代码示例:
import React, { Component } from 'react';
import { Text, View } from 'react-native';
class WhyReactNativeIsSoGreat extends Component {
render() {
return (
<View>
<Text>
If you like React on the web, you'll like React Native.
</Text>
<Text>
You just use native components like 'View' and 'Text',
instead of web components like 'div' and 'span'.
</Text>
</View>
);
}
}
了解更多关于React的信息,请访问由Facebook团队创建的官方网站:
了解更多关于React Native的信息,请访问以下React Native官方网站:
首先,相似之处:React和React Native(RN)都旨在创建灵活的用户界面。这些框架有很多好处,但最基本的是它们是为UI开发而设计的。Facebook在React几年后开发了RN。
React:
Facebook设计这个框架几乎像在HTML/XML中编写JavaScript一样,这就是为什么标签被称为“JSX”(JavaScript XML),并且类似于熟悉的HTML标签,如<div>
或<p>
。React的一个标志是大写字母标记,表示自定义组件,例如<MyFancyNavbar />
,这也存在于RN中。然而,React使用DOM。DOM存在于HTML中,因此React用于Web开发。
React Native:
RN不使用HTML,因此不用于Web开发。它用于几乎所有其他领域!移动开发(iOS和Android),智能设备(例如手表、电视),增强现实等。由于RN没有DOM可供交互,因此它使用自己的标签来代替React中使用的相同类型的HTML标签,这些标签随后会编译成其他语言。例如,RN开发人员使用RN内置的<View>
标签,而不是<div>
标签,它在幕后编译为其他本地代码(例如,在Android上是android.view
,在iOS上是UIView
)。
简而言之:它们非常相似(用于UI开发),但用于不同的媒介。
ReactJS是用于构建UI组件层次结构的框架。每个组件都有状态和属性。数据通过属性从顶层组件流向低级组件。使用事件处理程序在顶层组件中更新状态。
React Native使用React框架构建移动应用程序组件。React Native为iOS和Android平台提供了一组基本组件。React Native中的一些组件包括Navigator、TabBar、Text、TextInput、View、ScrollView。这些组件在内部使用本地iOS UIKit和Android UI组件。React Native还允许使用NativeModules,在JavaScript中可以使用Objective-C编写的iOS代码和Java编写的Android代码。
注意:React Native作为一个框架,允许以类似于HTML和CSS的语法开发移动应用程序。React Native组件有效地替换了本地开发中的HTML。
而React.js是用于开发Web应用程序的父级JavaScript库。
在React-Native中,您经常使用像<View>,<Text>这样的标签,而React.js使用Web HTML标签,如<div>,<h1>,<h2>,它们只是Web /移动开发字典中的同义词。
对于React.js,您需要DOM来渲染HTML标签路径,而对于移动应用程序:React-Native使用AppRegistry来注册您的应用程序。
我希望这是React.js和React-Native之间快速区别/相似性的简单解释。
JS线程执行所有计算并将数据传递给本地线程,如何实现?
React使用异步桥接以JSON格式将数据传递到本地线程,称为React-Native。
注意:新架构不再依赖于桥接,而是使用JSI和fabric在本地和JS代码之间进行同步通信(在下面的部分中解释)。
因此,我们在React Native中使用本地组件制作演示视图,并使用该桥梁在这两个不同的世界之间进行通信。
JS线程足够快以执行JavaScript,本地线程也足够快以执行本地代码,但由于React使用异步桥梁在这两个世界之间进行通信,所以过载此桥梁会导致性能问题。
更新: React-Native现在正在经历重新架构阶段,Facebook团队正在尝试删除异步桥梁,以便在JS和本地之间同步通信,这个重新架构的主要部分是JSI(Javascript interface)和fabric。
JSI: JSI消除了Native(Java / ObjC)和Javascript代码之间桥接的需要。它还消除了在两个世界之间进行通信时序列化/反序列化所有信息的要求。JSI通过将JavaScript和本地世界靠近打开了新的可能性。
以下是JSI提供的主要内容。
Javascript接口,允许我们向Javascript运行时注册方法。这些方法可以通过Javascript世界中的全局对象使用。
这些方法可以完全用C ++编写,也可以是在iOS上与Objective C代码通信的一种方式,以及在Android上与Java代码通信的一种方式。
任何当前使用传统桥梁在Javascript和本地世界之间进行通信的本地模块都可以通过编写简单的C ++层将其转换为JSI模块。在iOS上编写此层很简单,因为C ++可以直接在Objective C中运行,因此现在可以使用所有iOS框架和代码。
但是,在Android上,我们必须走额外的路程来通过JNI完成此操作。
这些方法可以完全同步,这意味着不需要使用async / await。
Fabric: Fabric是一个新的UI层,允许我们与本地UI组件同步通信,根据docs。
Fabric是React Native的新渲染系统,是传统渲染系统的概念演进。其核心原则是在C ++中统一更多的渲染逻辑,提高与主机平台的互操作性,并为React Native解锁新功能。开发始于2018年,2021年,Facebook应用程序中的React Native由新的渲染器支持。
让我们谈谈这两个框架之间的共同点和差异。
特性 | React | React-Native |
---|---|---|
平台 | Web | Android、IOS、Web |
开源 | 是 | 是 |
用户界面 | HTML + CSS | 本地组件(iOS、Android、Web) |
架构 | 虚拟DOM | 虚拟DOM + 桥接层 + 本地实现 |
动画 | CSS动画 | 本地动画 |
样式 | CSS | JS样式表 |
开发者 |
我们不能完全比较它们,因为使用情况存在差异。
(2018 更新)
React 的主要关注点是Web 开发。
React 的扩展,专注于移动开发。
希望我对你有所帮助 :)
简单来说,React和React Native在设计原则上基本相同,不同之处在于设计用户界面的情况。
总之,这是一个构建移动端和Web用户界面的绝佳库。
React是一个声明式、高效和灵活的JavaScript库,用于构建用户界面。你的组件告诉React你想要渲染什么-然后当你的数据改变时,React会高效地更新和渲染恰当的组件。这里,ShoppingList是一个React组件类或React组件类型。
React Native应用程序是一个真正的移动应用程序。使用React Native,你不是构建“移动Web应用程序”,“HTML5应用程序”或“混合应用程序”。你构建的是一个与使用Objective-C或Java构建的应用程序无法区分的真正的移动应用程序。React Native使用与常规iOS和Android应用程序相同的基本UI构建块。
<h1>
、<p>
等,而 React Native 则渲染原生应用程序视图组件,例如<View>
、<Text>
、<Image>
、<ScrollView>
,因此除非重新制作/替换所有元素,否则无法直接重用 UI 组件代码。 - Ira Herman