RN越来越火,小编 认为也有必要学习一把,虽然原生应用优势很明显,但是也存在着发版的痛点。
facebook为了解决这种痛点,出了RN。
本人不太建议成熟的app,从新使用RN开发,人力资源耗费太多。
废话不多说了。
第一讲,建立原生应用,然后配置成RN环境。

1 使用android studio,生成TestHello项目

android studio建立新项目很简单,大家都会,当然你有成熟的项目,尤其是购物项目,可以直接使用,因为购物应用,需要不停的有活动和购物节,发版要求很高。

RN项目开发调试已有的ios项目 rn开发教程_RN项目开发调试已有的ios项目


因为本人也是小白,所以写的啰嗦一点。

从箭头入口,建立一个新项目。

这里小白按照facebook官网文档往下说,有兴趣的也可以去官网文档上看。

(1)可以参考RN生成的目录结构,把你的项目,先用android目录,放里面。

注意:这一步是个坑,如果不这样,可能就出现无法识别android项目错误。

(2)执行


$ npm init
$ npm install --save react react-native
$ curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig

上面这些命令,在你得命令行里面(前提你已经配好了开发环境,这个下一讲说一下)

(3)

RN项目开发调试已有的ios项目 rn开发教程_React_02


这一步要填一些东西,名字必须是小写,其他随便填填

这一步 ,node环境就配好了

(4)修改一些参数

找到package.json 这个文件

“start”: “node node_modules/react-native/local-cli/cli.js start”

这个位置,可以参考RN生成的项目文件,位置

(5)写个js文件

'use strict';

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

class HelloWorld extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.hello}>Hello, World</Text>
      </View>
    )
  }
}
var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
  },
  hello: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
});

AppRegistry.registerComponent('HelloWorld', () => HelloWorld);

这都是官网给出的例子。index.android.js文件名,RN的第一个js文件,基本都是这。
(6)在你原生项目app里面 build.gradle这个文件里面加入

dependencies { 
... compile "com.facebook.react:react-native:+" // From node_modules.
}

这个位置相信大家很容易找到,我这小白都知道。
(7)在原生项目build.gradle这个文件里加

allprojects { 
repositories { ... maven { 
 // All of React Native (JS, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android" } } ... }

(8)很重要一点,你的原生应用要加入网络权限
因为,RN的js文件是在服务器上,就跟搞web一样,有服务器的,不能联网,就用不了。

<uses-permission android:name="android.permission.INTERNET" />

(9)在原生应用activity里面加,调用js代码(理解不一定准确)
这有点蛋疼,还是切回到android studio搞一下,这一步坑了,大家最好是先进行这一步,官网也挺坑。

package com.example.test.testhello;

import android.app.Activity;
import android.os.Bundle;

import com.facebook.react.LifecycleState;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.shell.MainReactPackage;

public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler{
    private ReactRootView mReactRootView;
    private ReactInstanceManager mReactInstanceManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mReactRootView = new ReactRootView(this);
        mReactInstanceManager = ReactInstanceManager.builder()
                .setApplication(getApplication())
                .setBundleAssetName("index.android.bundle")
                .setJSMainModuleName("index.android")
                .addPackage(new MainReactPackage())
                .setUseDeveloperSupport(BuildConfig.DEBUG)
                .setInitialLifecycleState(LifecycleState.RESUMED)
                .build();
        mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null);
        setContentView(mReactRootView);
    }

    @Override
    public void invokeDefaultOnBackPressed() {
        super.onBackPressed();
    }


}

简单写写,官网上有些方法这里没写。
(10)剩下就是运行我们的RN项目了,然后看看有没有遇到什么坑
这里说一下编辑器工具,我RN用的是微软的VS code,本人觉得用着挺爽,前提是也没用其他的。
很激动,一次尝试就成功,编译通过,安装成功app,不过app运行崩溃了,肯定是遇到坑了,大概过程就是这样。
大家可以把遇到的坑,写在评论里,一起趟过去,祝大家好运。