跳到主要内容
版本:0.80

学习基础知识

React Native 就像 React,但它使用原生组件而不是 Web 组件作为构建块。所以要理解 React Native 应用程序的基本结构,您需要了解一些基本的 React 概念,如 JSX、组件、stateprops。如果您已经知道 React,您仍然需要学习一些 React Native 特有的东西,比如原生组件。本教程面向所有受众,无论您是否有 React 经验。

让我们开始吧。

你好世界

按照我们人民的古老传统,我们必须首先构建一个除了说"Hello, world!"之外什么都不做的应用程序。它是这样的:

如果您感到好奇,可以直接在 Web 模拟器中玩转示例代码。您也可以将其粘贴到您的 App.js 文件中,在本地机器上创建一个真实的应用程序。

这里发生了什么?

  1. 首先,我们需要导入 React 以便能够使用 JSX,然后它将被转换为每个平台的原生组件。
  2. 在第 2 行,我们从 react-native 导入 TextView 组件。

然后我们定义 HelloWorldApp 函数,它是一个 函数组件,其行为与 Web 版 React 中的方式相同。此函数返回一个带有一些样式的 View 组件,并将 Text 作为其子组件。

Text 组件允许我们渲染文本,而 View 组件渲染一个容器。此容器应用了多种样式,让我们分析一下每一个的作用。

我们发现的第一个样式是 flex: 1flex prop 将定义您的项目如何沿主轴“填充”可用空间。由于我们只有一个容器,它将占用父组件的所有可用空间。在这种情况下,它是唯一的组件,因此它将占用所有可用的屏幕空间。

下一个样式是 justifyContent: "center"。这将容器的子组件对齐到容器主轴的中心。最后,我们有 alignItems: "center",它将容器的子组件对齐到容器交叉轴的中心。

这里的一些东西在你看来可能不像 JavaScript。别慌。这是未来

首先,ES2015(也称为 ES6)是对 JavaScript 的一组改进,它现在是官方标准的一部分,但尚未被所有浏览器支持,因此通常尚未在 Web 开发中使用。React Native 附带 ES2015 支持,因此您可以使用这些东西而无需担心兼容性。上面示例中的 importexportconstfrom 都是 ES2015 特性。如果您不熟悉 ES2015,您可以通过阅读本教程这样的示例代码来了解它。如果您愿意,此页面 有一个很好的 ES2015 特性概述。

此代码示例中的另一个不寻常之处是 <View><Text>Hello world!</Text></View>。这是 JSX - 一种在 JavaScript 中嵌入 XML 的语法。许多框架使用专门的模板语言,允许您在标记语言中嵌入代码。在 React 中,这是相反的。JSX 允许您在代码中编写标记语言。它看起来像 Web 上的 HTML,除了不是使用 <div><span> 这样的 Web 东西,您使用的是 React 组件。在这种情况下,<Text> 是一个显示一些文本的 核心组件,而 View 就像 <div><span>

组件

所以这段代码正在定义 HelloWorldApp,一个新的 Component。当您构建 React Native 应用程序时,您将经常制作新组件。您在屏幕上看到的任何内容都是某种组件。

属性

大多数组件在创建时可以使用不同的参数进行自定义。这些创建参数称为 props。

您自己的组件也可以使用 props。这使您可以创建一个单个组件,该组件在应用程序中的许多不同地方使用,每个地方的属性略有不同。在函数组件中引用 props.YOUR_PROP_NAME,或在类组件中引用 this.props.YOUR_PROP_NAME。这是一个示例:

使用 name 作为 prop 让我们可以自定义 Greeting 组件,因此我们可以为每个问候语重用该组件。此示例还在 JSX 中使用了 Greeting 组件。能够做到这一点正是 React 如此酷的原因。

这里发生的另一件新事情是 View 组件。View 可用作其他组件的容器,有助于控制样式和布局。

使用 props 和基本的 TextImageView 组件,您可以构建各种各样的静态屏幕。要了解如何使您的应用程序随时间变化,您需要 了解状态

状态

只读 且不应修改的 props 不同,state 允许 React 组件响应用户操作、网络响应和其他任何事物随时间改变其输出。

React 中 state 和 props 有什么区别?

在 React 组件中,props 是我们从父组件传递给子组件的变量。同样,state 也是变量,区别在于它们不是作为参数传递的,而是由组件内部初始化和管理的。

React 和 React Native 在处理 state 方面有区别吗?

tsx
// 使用 Hooks 的 ReactJS 计数器示例!

import React, {useState} from 'react';



const App = () => {
const [count, setCount] = useState(0);

return (
<div className="container">
<p>You clicked {count} times</p>
<button
onClick={() => setCount(count + 1)}>
Click me!
</button>
</div>
);
};


// CSS
.container {
display: flex;
justify-content: center;
align-items: center;
}

tsx
// 使用 Hooks 的 React Native 计数器示例!

import React, {useState} from 'react';
import {View, Text, Button, StyleSheet} from 'react-native';

const App = () => {
const [count, setCount] = useState(0);

return (
<View style={styles.container}>
<Text>You clicked {count} times</Text>
<Button
onPress={() => setCount(count + 1)}
title="Click me!"
/>
</View>
);
};

// React Native 样式
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});

如上所示,在 ReactReact Native 之间处理 state 没有区别。您可以使用 hooks 在类和函数组件中使用组件的状态!

在下面的示例中,我们将使用类展示上述相同的计数器示例。