React Native 入门

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Native 入门相关的知识,希望对你有一定的参考价值。

React Native 入门

这里假设你已经知道一些 React 的知识,因此关于 JSX 等 React 基础这里不会过多介绍。

环境配置

这里使用 expo 而非原生 RN CLI,主要是因为 expo 的配置比较无痛,RN CLI 好像还需要自己搭配环境,并且不支持 Windows 和 Linux……

expo 的安装方式如下:

$ npx create-expo-app AwesomeProject

$ cd AwesomeProject
$ npx expo start

我之前有用比较老旧 npm install -g expo,不过现在看来已经不需要了。

运行成功后部分截图如下:

模拟器安装

如果有多设备,可以直接在手机上安装 Expo Go,安卓可以直接通过 Expo Go 扫二维码打开 RN 程序,ios 则通过相机扫二维码。

另一个方式就是通过模拟器,模拟器这一块相对而言是比较麻烦的:

  1. 如果不是 Mac 用户

    我没有在其他环境下折腾过 ios 模拟器,目前 Xcode 应该也是只支持 mac 开发,所以说如果没有 ios 设备,模拟器方面可能只能使用安卓模拟器

  2. 在国内

    下载 android studio 会挺麻烦的,毕竟 sdk 还是属于谷歌全家桶套餐……

    不过镜像应该挺多的,所以折腾一下也是可以克服的。

克服了以上困难后,就可以进行模拟器的安装了。

安卓模拟器

下载完了之后的界面如下:

点击 More Actions > Virtual Device Manager 就可以打开模拟器界面:

如果已经有模拟器了,直接运行即可,没有选择 Create device 创建一个新的模拟器:

其他没什么大问题,只是需要注意一下安装的模拟器要有 play store:

Expo 似乎通过 play store 进行的关联,没有的话模拟器可能会打不开。

接下来就是克服困难急需下载 sdk 的步骤了。

IOS 模拟器

开 IOS 模拟器需要下载 Xcode 完整版,并且需要确定 Xcode 的 CLI 也安装完成:

随后通过搜索栏搜索 simulator.app,打开后就有了 IOS 模拟器。

选择模拟器的方法就是选择 file,选中想要的模拟器即可:

模拟器全都安装完毕后,回到 RN 的项目中,在命令行输入 i 打开 ios 模拟器,或 a 打开安卓模拟器,expo 会自动映射对应的模拟器,最后:

RN 基础

RN 组件不是 html 组件

React 写习惯了,会有种 直接在 JSX 里面写 HTML 的错觉:

<div>
  <h1>React Code</h1>
</div>

但是这还是不对的,本质上来说,React 会将 JSX 转化为 HTML 元素,并且通过 ReactDOM 进行渲染。但是在 RN 的世界中,ReactDOM 并不直接存在。相反的,React 会将代码转成对应的 native 元素,如 View 会被映射成 UIView, <div>, android.view 等,因此,RN 中不能直接写 HTML 元素,而是要使用合适的组件去封装,如:

import React from 'react';
import  View, Text  from 'react-native';

const ViewBoxesWithColorAndText = () => 
  return (
    <View
      style=
        flexDirection: 'row',
        height: 100,
        padding: 20,
      
    >
      <View style= backgroundColor: 'blue', flex: 0.3  />
      <View style= backgroundColor: 'red', flex: 0.5  />
      <Text>Hello World!</Text>
    </View>
  );
;

⚠️:使用的所有组件必须要从 react-native 中导入

RN 中没有 CSS

尽管 JSX 提供了 style 的语法糖,本质上这也不是 CSS。RN 中修改样式有两种方法:

  1. 行内样式

    行内样式并不会包含所有 CSS 样式,它是 CSS 的一个 subset,很多原生 CSS 有的样式,RN 中并不存在,比如说 border

    因此在实现 RN 的时候,在不了解行内样式时,还是要多看代码提示。

  2. StyleSheet

    import  StyleSheet, Text, View  from 'react-native';
    
    export default function App() 
      return (
        <View style=styles.container>
          <Text style= border >Hello From the other side</Text>
        </View>
      );
    
    
    const styles = StyleSheet.create(
      container: 
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center',
      ,
    );
    

    StyleSheet 也是 RN 提供的一个对象,在使用的时候需要导入,通过 StyleSheet 可以实现可复用的样式。

基础布局

RN 中的基础布局可以通过 Flexbox 实现:Layout with Flexbox,使用和 CSS 的很像,不过一些默认值不太一样,比如说 web 中 flex 的 flex-direction 默认值是 row,RN 中是 column,不过大致上使用方法还是一致的。

参考一下代码:

import  Button, StyleSheet, TextInput, View, Text  from 'react-native';

export default function App() 
  return (
    <View style=styles.appContainer>
      <View style=styles.inputContainer>
        <TextInput placeholder="Some Random Input" style=styles.textInput />
        <Button title="Add Input" />
      </View>
      <View>
        <Text>List of Inputs...</Text>
      </View>
    </View>
  );


const styles = StyleSheet.create(
  appContainer: 
    padding: 50,
  ,
  inputContainer: 
    flexDirection: 'row',
    justifyContent: 'space-between',
  ,
  textInput: 
    borderWidth: 1,
    borderColor: '#ccc',
    width: '80%',
    marginRight: 8,
    padding: 8,
  ,
);

渲染结果如下:

可以看到布局大致上是一致的,不过有一些细节不太一样,比如说按钮的默认 CSS 等,除此之外应该可以看到,通过 RN 的确可以写一套代码应用于多种设备。

⚠️:Flexbox 在 RN 中是默认开启的,不过 flex-directioncolumn 不是 row

以上是关于React Native 入门的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError - node_modules/react-native/Libraries/polyfills/error-guard.js:缺少分号。 (14:4) 在 react nati

React-Native 当前url和cookies的获取

React-Native 适合初学的第一个教程demo,找租房

react-native常用插件

React Native 环境

React Native 网络请求