1. 程式人生 > >[React-native]第一行程式碼Helloworld及整合已有專案的方案

[React-native]第一行程式碼Helloworld及整合已有專案的方案

一、參考官方文件點選開啟連結寫了第一個文件hello world

程式碼如下:

初始化一個專案HelloWorld,進入Helloworld資料夾,執行命令:

react-native init HelloWorld

得到資料夾中檔案:

修改index.android.js如下

import React,{Component} from 'react';
import {AppRegistry,Text} from 'react-native';
class HelloWorld extends Component{
  render(){
    return (
        <Text>Hello world!</Text>
      );
  }
}
AppRegistry.registerComponent('HelloWorld',()=>HelloWorld);

二、開啟學習ES 6第一步:部署支援環境

一、nvm版本管理工具安裝點選開啟連結(nvm連結中包含安裝地址,可獲取最新版本)

1.控制檯直接輸入命令安裝:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash

僅僅只是下載成功,還需執行下述命令:
source ~/.nvm/nvm.sh
然後檢視如下則成功:


二、Node.js是JavaScript語言的伺服器執行環境,對ES6的支援度比瀏覽器更高。

$ nvm install node

PS:如何使用node.js執行js

例如新建一個app001.js

var tmp = new Date();
function f(){
	console.log(tmp);
}
f();

在控制檯執行及結果:

ebj1831:ES6 user$ node --harmony app001.js 
2016-11-01T08:56:12.241Z

三、在已有專案中引入react native

一)進入已有專案根目錄執行下述命令:

PS:共三行命令。究竟是什麼意思?

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

第一條:npm init會引導你建立一個package.json檔案,包括名稱、版本、作者這些資訊等。

對於我們這些原生想做React native的人來說,確實不知道package.json是做什麼用的,各個引數用來做什麼。參考 package.json的各個欄位意思

當然,我們只是先引入一個helloworld可以不參考。直接去之前的demo裡面找到package.json複製過來就可以了!!!(拿來主義總規非正統做法,大家可一不可再)


第二條:npm install --save react react-native:安裝的同時,將資訊寫入package.json中

第三條:命令的作用。從https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig下載檔案並且檔名為.flowconfig。

二、開啟package.json的scripts中,新增這一行:

(當然,這個對於我們來說就不必要了,我們是複製的官方的demo的package.json,裡面已經有了)

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

三、從demo裡面把index.android.js複製到我們的專案的根目錄下面。

import React,{Component} from 'react';
import {AppRegistry,Text} from 'react-native';
class HelloWorld extends Component{
  render(){
    return (
        <Text>Hello world!</Text>
      );
  }
}
AppRegistry.registerComponent('HelloWorld',()=>HelloWorld);

在app的build.gradle新增依賴:(放棄低於34的版本吧,寫activity用新版本超級輕鬆)

compile "com.facebook.react:react-native:+" // From node_modules.
PS:一開始提示這個錯誤(應該大部分人不會遇到,but還是寫一下)
Error:(30, 13) Failed to resolve: com.facebook.react:react-native:0.36.0
Disable offline mode and Sync

原因是預設設定裡面gradle是離線offline的緣故。解決如下:


四、在程式的(非當前module)build.gradle新增:

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

紅色預警,此處有坑:

一定要記得把$rootDir/../node_modules/react-native/android中間的..去掉,改成$rootDir/node_modules/react-native/android

PS:遇到一個錯誤:

tried to access method android.support.v4.net.ConnectivityManagerCompat.<init>:
(Lcom/facebook/react/bridge/ReactApplicationContext;)V from class com.facebook.react.modules.netinfo.NetInfoModule


原因:V7包衝突

把原有專案的v7包改成這個:

compile 'com.android.support:appcompat-v7:23.0.1'

當然對應的把這些也改成這樣為好:

compileSdkVersion 23
    buildToolsVersion '23.0.1'

    defaultConfig {
        applicationId "com.example.user.reactnativedemo"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

五、AndroidManifest.xml新增網路許可權:

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

六、新增原生程式碼:

(此處就不要參考官方的程式碼了,實在是太長了,用react34之後新寫法吧)如下:

一)寫個application:

package com.example.user.reactnativedemo;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    protected boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage()
      );
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
      return mReactNativeHost;
  }
}

二)寫個activity如下:

package com.example.user.reactnativedemo;

import com.facebook.react.ReactActivity;

/**
 * Created by user on 16/11/2.
 */
public class MyReactActivity extends ReactActivity {

    @Override
    protected String getMainComponentName() {
        return "HelloWorld";
    }
}

三、主activity如下:(原生demo,主要用來跳轉到react-native頁面)

package com.example.user.reactnativedemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,MyReactActivity.class));
            }
        });
    }
}

四、androidManifest如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.user.reactnativedemo">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".MainApplication"
        android:supportsRtl="true"
        >
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MyReactActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity>
    </application>

</manifest>

五、模擬器效果如下:

六、真機執行效果

問題:真機螢幕顯示一塊白屏。As的logcat提示:

com.facebook.react.devsupport.JSException: Could not get BatchedBridge, make sure your bundle is packaged correctly
解決方案:

進入專案,在android/app/src/main下新建assets目錄,控制檯執行以下兩條命令

react-native start > /dev/null 2>&1 &
curl "http://localhost:8081/index.android.bundle?platform=android" -o "app/src/main/assets/index.android.bundle"

成功效果如下:



動畫效果圖如下:



相關推薦

React-native第一程式碼Helloworld整合專案方案

一、參考官方文件點選開啟連結寫了第一個文件hello world 程式碼如下: 初始化一個專案HelloWorld,進入Helloworld資料夾,執行命令: react-native init HelloWorld 得到資料夾中檔案: 修改index.android.

react-native-cli運項目打包apk失敗的解決過程

一段時間 inline sem 命令 gradle nsf 錯誤提示 路徑 div 剛開始學習react native,第一步自然是搭建好開發環境,node及jdk本身就有,Python2、Android studio以及Android sdk的安裝倒是沒什麽大問題,按照官

Android Studio 單刷《第一程式碼》系列 01 —— 第一HelloWorld

前言(Prologue) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持

react-native android 運命令

ble 一次 debug模式 adl modules release assembler all g模式 debug模式運行 sudo react-native run-android release模式運行 sudo react-native run-android --

第一程式碼到發鏈只需一小時,用這款新工具,你也能做到

古羅馬,“乘法”是隻有御用數學家才能理解的深奧概念——而當阿拉伯數字出現,孩童亦能於紙上演算。 新工具不僅提升效率,還可為前人所不能。作為活躍開發領域之一,區塊鏈新技術、工具、平臺、語言與框架層出不窮,然而面對紛繁複雜的選擇,開發者難以面面俱到。《區塊鏈大本營 | 新工具》欄目

安卓學習(初)第一章(《第一程式碼》)

一、建立第一個安卓專案步驟: 1、在Android studio介面點選star a new Android studio project。然後在接下來的介面填入該專案的名稱、公司域名以及專案程式碼的存放地址(如果沒特殊要求一般選擇預設)。 2、再下一個介面指定Minimum SDK和選擇開

安卓學習(初)第三章(2)(《第一程式碼》)

一、佈局的線性佈局<LinearLayout 1、示例: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal"

安卓學習(初)第三章(3)(《第一程式碼》)

一、建立自定義標題欄 1、以線性佈局編寫程式碼。除了之前學過的設定控制元件對齊方式控制元件大小還有控制元件地址命名外,android:text設定控制元件文字內容,android:textColor設定控制元件底色,android:background設定背景,android:layout_ma

安卓學習(初)第二章(4)(《第一程式碼》)

一、活動的啟動模式 1、啟動模式有四種,分別是standard,singleTop,singleTask,singleInstance。可以在註冊活動中通<acivity>標籤指定android:launchMode="... 模式  ..."屬性來選擇啟動模式。 2、

安卓學習(初)第二章(2)(《第一程式碼》)

一、用Intent啟動活動 1、Intent()函式需要兩個引數,第一個引數要求提供一個啟動活動的上下文,第二個引數是指定想要啟動哪個目標活動 2、示例: public void onClick(View v){ Intent intent=new Intent(FirstAc

安卓學習(初)第二章(3)(《第一程式碼》)

一、活動生存期 1、Activity類中一共七個回撥方法 onCreate(),活動第一次建立的時候用的方法。在這個方法中要完成活動的初始化,如載入佈局、繫結事件。——活動由無到有 onStart(),這個方法在活動由不可見變為可見的時候呼叫。——活動開始執行 onResume(),

安卓學習(初)第二章(1)(《第一程式碼》)

一、手動建立一個活動 1、活動建立的檔案目錄在app/src/main/java/com.example.acctivitytes 2、右擊com.example.acctivitytest包——New→Activity→Empty Activity,這樣就在com.example.acct

安卓學習(初)第三章(1)(《第一程式碼》)

佈局控制元件 一、TextView 1、<TextView>可以說是Android中最簡單的一個控制元件,主要用於在介面上顯示一段文字資訊。 2、指定控制元件的寬度和高度 android:layout_width="match_parent" android:layout

Android 學習之《第一程式碼》第二版 筆記(十)探究碎片(二)

一個簡易版的新聞應用 同時相容手機和平板的應用程式 一、佈局 news_content_frag.xml額我的程式碼裡面是news_content_fragment.xml,圖片打錯了 二、程式碼編寫 1. 實體類(News.java) //新聞實體類 pub

Android 學習之《第一程式碼》第二版 筆記(九)探究碎片(一)

一、碎片 1. 碎片是什麼: 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,能讓程式更加合理和充分地利用大螢幕的空間。(可以理解成迷你型活動) 2. 簡單用法: 在一個活動當中新增兩個碎片,並讓這兩個碎片平分活動空間。 1.)效果圖(沒錢買平板,CPU不支援

Android 學習之《第一程式碼》第二版 筆記(十一)詳解廣播機制(一)

一、廣播機制簡介 1. 四大元件之一 2. Android 提供了一套完整的API,允許應用程式自由地傳送和接收廣播。 A. 傳送廣播藉助Intent B. 接收廣播藉助廣播接收器(Broadcast Receiver) 3. 廣播型別: A. 標準廣播: 完全非同步執行

React Native 開發第一

React Native 開發第一節記錄 搭建開發環境 1.1 安裝 Homebrew https://brew.sh 開啟終端輸入 貼上 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.

Android 學習之《第一程式碼》第二版 筆記(十二)詳解廣播機制(二)

廣播的最佳實踐——實現強制下線功能 思路:在介面上彈出一個對話方塊,讓使用者無法進行任何操作,必須點選對話方塊中的確定按鈕,然後回到登入介面即可。 一、效果圖 1. 登入介面並輸入賬號密碼 2. 登陸後的介面 3. 強制下線 4. 退回登陸的介面

第一程式碼-運用手機多媒體總結(下)

從相簿中選擇照片 第一步,開啟相簿 //判斷是否有許可權,沒有就申請開啟相簿的許可權,有則開啟相簿 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_

第一程式碼--第九章-使用網路技術

這一章的內容主要有使用WebView展示網頁,使用HTTP協議訪問網路,解析xml資料以及解析json資料,下面是我自己的總結: WebView 在應用程式裡展示網頁 簡單用法 WebView webview=(Webview)findViewById(R.id.web