React,一个UI库。

React Native,使用React写出原生的东西。

和Electron,把Web页面当作桌面程序运行有点异曲同工之妙,但是区别挺大的。

Electron嘛,可以理解成一个轻便的浏览器,React Native嘛,是把React Native的组件转换成安卓原生的组件渲染(假装这个库不支持苹果因为我不喜欢苹果),用个什么引擎运行javascript脚本。

所以,React Native库完全不能像Electron一样把网页直接拿来渲染。

React Native摸不到安卓底层,很多东西没有(比如传感器),这需要写java代码给React Native调用。

React Native不写原生代码的话只能做到漂亮的UI+网络操作。

但是看看我写的稀碎的安卓界面交互,React Native,可以。

环境搭建

首先,需要魔法上网,好多东西都是从谷歌下的。

React Native目前要求Nodejs v14+,win7只能安装到v13,所以需要win8或更高版本的操作系统。

因为和安卓扯上关系了,还要Java SDK和Android SDK。

目前Java SDK要求v11+,Android SDK要求31版本的。

Android SDK的话,安装好Android Studio直接去SDK Manager找就好了。

Android SDK还需要手动设置一下环境变量,好让之后编译项目的时候能找到:

对着官方文档,PATH变量加上这些:

%ANDROID_SDK_ROOT%\platform-tools
%ANDROID_SDK_ROOT%\emulator
%ANDROID_SDK_ROOT%\tools
%ANDROID_SDK_ROOT%\tools\bin

然后加一个ANDROID_SDK_ROOT变量,填SDK的绝对目录。

安装React Native嘛,直接找npm就好了:

npm install -g react-native
npm install -g yarn # 后面会用到,npm的替代品,顺手装上。

装好了创建项目:

npx react-native init 项目名

(helloworld居然是保留字段!??)

完了之后会创建一个项目名的目录,CD进去,有很多东西,先编译运行试试环境。

在此之前,先用adb把手机或者模拟器连上。

yarn react-native run-android

这个命令会同时启动一个叫Metro的东西,这是用于往手机上动态发送页面的,方便调试。

不出意外,漫长的等待之后手机会运行一个app。

(学习每个东西的时候我在这里都会出意外,这次是因为执行之后ctrl+c了一次,java的编译器并没有ctrl+c掉,两次的编译器同时编译,导致编译失败···)

yarn start可以单独启动Metro。

Hello World

嗯,什么都可以没有,这个不能少。

打开index.js,这是nodejs的入口代码。

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';

AppRegistry.registerComponent(appName, () => App);

这个我懂,React不是组件化的嘛,这就是把App这个组件作为根组件,启动应用嘛。

去把根组件改成HelloWorld呗。

直接打开App.tsx,看不懂的全都删除,加上我想写的东西:

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

function App(): JSX.Element {
    return(
      <View>
        <Text>
          你好世界!
        </Text>
      </View>
    );
}

export default App;

ctrl+s保存文件的一瞬间,Metro就把页面发给手机了,瞬间看到效果。

调试

Web开发的各种BUG都很好解决啦,前提是得有调试器。

Metro在手机连接的时候会同时在电脑上打开一个网页,利用浏览器进行调试。

我不想用浏览器调试,官方有提供独立的调试器,但它死活安不上,这个依赖Electron,虽然我以前安装过Electron,但它非得再装一遍,二进制文件下载不下来,好在可以去Github下载

现阶段的我还不会用这东西


能写HelloWorld离真正能写出东西还差得远呢,还要继续学习···

但是我不能整功夫捣鼓它了,我要抽出时间卷文化课

我能想到的,最大的成功就是无愧于自己的心。