React Native和React有什么区别?

925

出于好奇我开始学习React,并想知道React和React Native的区别-尽管使用Google找不到令人满意的答案。React和React Native似乎具有相同的格式。它们是否具有完全不同的语法?


110
很多人在被问及这个问题时都给出了一个字典式的回答,而大多数人只是想知道它们是否可以互换使用:在将 React 代码移植到 React Native 上有多容易?如果你想在 iPad 上使用它,你需要将 Web 应用程序的前端重写为不同的 React 代码吗?它们之间有何不同? - Lawrence Weru
39
React Native 可以构建适用于 iOS、Android 和 Windows Mobile 的移动应用程序,你可以编译并放置在应用商店供用户安装。而 ReactJS 用于构建网页,用于在 web 浏览器中使用。两者都使用可重用组件,但是用于呈现组件中元素的语法(使用 JSX)是不同的。React JSX 渲染类似于 HTML 的组件,例如 <h1><p> 等,而 React Native 则渲染原生应用程序视图组件,例如 <View><Text><Image><ScrollView>,因此除非重新制作/替换所有元素,否则无法直接重用 UI 组件代码。 - Ira Herman
React是一个用于开发Web应用程序前端的JavaScript库。React Native用于移动应用程序。 - subhashis
45个回答

18

React Native 主要使用 JavaScript 进行开发,这意味着大部分启动所需的代码可以在平台之间共享。React Native 会使用本地组件进行渲染。React Native 应用程序是使用目标平台所需的语言进行开发的,例如 Objective-C 或 Swift 用于 iOS,Java 用于 Android 等等。编写的代码不能在平台之间共享且行为有所不同。它们可以直接访问平台提供的所有功能,没有任何限制。

React 是由 Facebook 开发的开源 JavaScript 库,用于构建用户界面。它通常用于处理 Web 和移动应用程序的视图层。ReactJS 用于创建可重用的 UI 组件,是目前 IT 领域最受欢迎的 JavaScript 库之一,并拥有强大的基础和庞大的社区支持。如果您学习 ReactJS,则需要了解 JavaScript、HTML5 和 CSS。


18

ReactJS是一个核心框架,旨在基于响应式模式构建组件隔离,您可以将其视为MVC中的V,尽管我想指出React带来了不同的感觉,特别是如果您对响应式概念不熟悉。

ReactNative是另一层,旨在拥有Android和iOS平台的常见组件集。因此,代码看起来基本相同,因为它就是ReactJS,但在移动平台上以原生方式加载。您还可以使用Java/Objective-C/Swift桥接更复杂和与平台相关的API,然后在React中使用。


17

ReactReact NativeReact DOM的基本抽象,因此如果您要使用React Native,您也需要React...对于Web开发来说也是一样,只不过您需要使用React DOM而不是React Native。

由于React是基本抽象,因此一般的语法和工作流程相同,但您将使用的组件非常不同,因此您需要学习这些差异。这与React所谓的口号“学一次,随处编写”是一致的,因为如果您了解React(基本抽象),则可以在不学习另一种编程语言、语法和工作流程的情况下简单地学习平台之间的差异。


14

React-Native 是一个框架,而 ReactJS 则是你可以用于网站的 JavaScript 库。

React-Native 提供了默认的核心组件(如图像、文本),而 React 提供了一堆组件并使它们协同工作。


14

React Native是用于移动应用程序的,而React则是用于网站(前端)的。 这两个框架都是由Facebook发明的。 React Native是一个跨平台开发框架,这意味着一个人可以编写几乎相同的代码用于IOS和Android,而且它可以工作。我个人对React Native了解更多,因此就到此为止。


12

11

关于组件的生命周期和其他所有功能,大部分都是相同的。

主要区别在于使用的JSX标记。React使用类似HTML的标记。而另一种标记是由React Native用于显示视图的。


9

React Js 是通过操作 HTML Dom 来完成操作的。 而 React Native 是通过操作移动端(iOS/Android)本地 UI 组件来完成操作的。


9

虽然有点晚,但以下是更加全面的回答和示例:

React

React是一个基于组件的UI库,使用“shadow DOM”来高效地更新DOM,而不是为每个更改重建整个DOM树。它最初是为Web应用程序构建的,但现在也可以用于移动设备和3D / VR。

React和React Native之间的组件不能互换,因为React Native映射到本机移动UI元素,但业务逻辑和非渲染相关代码可以重用。

ReactDOM

最初包含在React库中,但在React被用于除Web之外的其他平台时被拆分出来。它作为DOM的入口点,与React一起使用。

例子:

import React from 'react';
import ReactDOM from 'react-dom';

class App extends Component {
    state = {
        data: [],
    }

    componentDidMount() {
        const data = API.getData(); // fetch some data
        this.setState({ data })
    }

    clearData = () => {
        this.setState({
            data: [],
        });
    }

    render() {
        return (
            <div>
                {this.state.data.map((data) => (
                    <p key={data.id}>{data.label}</p>
                ))}
                <button onClick={this.clearData}>
                    Clear list
                </button>
            </div>
        );
    }

}

ReactDOM.render(App, document.getElementById('app'));

React Native

React Native是一个跨平台移动框架,使用React,并通过“bridge”在JavaScript和本机组件之间进行通信。因此,在使用React Native时,许多UI结构都必须不同。例如:构建列表时,如果尝试使用map而非React Native的FlatList来构建列表,则会遇到主要性能问题。 React Native可用于构建IOS/Android移动应用程序,以及智能手表和电视。

Expo

Expo是开始新的React Native应用程序时的首选。

Expo是一种面向通用React应用程序的框架和平台。它是围绕React Native和本地平台构建的一组工具和服务,可帮助您开发、构建、部署和快速迭代iOS、Android和Web应用程序

注意:使用Expo时,只能使用他们提供的原生API。您包含的所有其他库都需要是纯JavaScript,或者您需要退出Expo。

使用React Native的相同示例:

import React, { Component } from 'react';
import { Flatlist, View, Text, StyleSheet } from 'react-native';

export default class App extends Component {
    state = {
        data: [],
    }

    componentDidMount() {
        const data = API.getData(); // fetch some data
        this.setState({ data })
    }

    clearData = () => {
        this.setState({
            data: [],
        });
    }

    render() {
        return (
            <View style={styles.container}>
                <FlatList
                    data={this.state.data}
                    renderItem={({ item }) => <Text key={item.id}>{item.label}</Text>}
                />
                <Button title="Clear list" onPress={this.clearData}></Button>
            </View>
        );
    }

}

const styles = StyleSheet.create({
    container: {
        flex: 1,
    },
});

区别:

  • 注意,render之外的所有内容都可以保持不变,这就是业务逻辑/生命周期逻辑代码可以在React和React Native中重用的原因。
  • 在React Native中,所有组件都需要从react-native或其他UI库中导入。
  • 使用某些与本地组件相对应的API通常比尝试在javascript端处理所有内容更具有更高的性能。例如, 映射组件来构建列表vs使用flatlist。
  • 微妙的差异: 诸如onClick变成onPress,React Native使用样式表以更有效的方式定义样式,而React Native使用flexbox作为默认布局结构以保持响应性。
  • 由于React Native中没有传统的“DOM”,因此只能在React和React Native之间使用纯JavaScript库。

React360

值得一提的是,React也可用于开发3D / VR应用程序。其组件结构与React Native非常相似。https://facebook.github.io/react-360/


7
ReactJS 是一个用于构建 web 界面的 JavaScript 库。您需要类似 webpack 的捆绑工具,以及安装所需模块来构建您的网站。 React Native 是一个 JavaScript 框架,它包含开发跨平台应用程序(如 iOS 或 Android)所需的所有内容。您需要安装 Xcode 和 Android Studio 来构建和部署您的应用程序。
与 ReactJS 不同,React-Native 不使用 HTML,而是使用类似组件来构建您的应用程序。这些组件使用真实的本地组件来构建 iOS 和 Android 应用程序。因此,React-Native 应用程序感觉很真实,不像其他混合开发平台。组件还增加了代码重用性,因为您不需要在 iOS 和 Android 上再次创建相同的用户界面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接