成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在React Native中寫一個自定義模塊

開發 前端
在 React Native 項目中可以看到 node_modules 文件夾,這是存放 node 模塊的地方,Node.js 的包管理器 npm 是全球最大的開源庫生態系統。提到npm,一般指兩層含義:一是 Node.js 開放式模塊登記和管理系統,另一種是 Node.js 默認的模塊管理器,是一個命令行軟件,用來安裝和管理 node 模塊。本文旨在探討如何在 React Native 中寫一個自定義的 npm 模塊(類似于插件),并上傳到 npm 上供他人使用。

前言

在 React Native 項目中可以看到 node_modules 文件夾,這是存放 node 模塊的地方,Node.js 的包管理器 npm 是全球***的開源庫生態系統。提到npm,一般指兩層含義:一是 Node.js 開放式模塊登記和管理系統,另一種是 Node.js 默認的模塊管理器,是一個命令行軟件,用來安裝和管理 node 模塊。本文旨在探討如何在 React Native 中寫一個自定義的 npm 模塊(類似于插件),并上傳到 npm 上供他人使用。

npm 使用介紹

npm 是一個 Node.js 模塊,安裝 Node.js 會默認安裝 npm,可以在終端中使用以下命令來查看 npm 的版本:

  1. npm -v 

升級 npm:

  1. sudo npm install npm -g 

安裝模塊(安裝完畢后會產生一個node_modules目錄,其目錄下就是安裝的各個node模塊):

  1. npm install <ModuleName> 

查看 npm 配置:

  1. npm config list 

設置代理:

  1. //設置 http 代理 
  2. npm config set proxy http://server:port 
  3. //設置 https 代理 
  4. npm config set https-proxy http://server:port 

 

上面介紹了一些 npm 基本命令,接下來就可以在本地創建一個模塊啦。 首先打開終端中新建一個你想在此創建自定義模塊的文件夾,然后在命令行中登錄 npm。輸入以下命令:

  1. npm adduser 

接下來會提示你輸入用戶名和密碼還有郵箱,一一完成后就可以輸入以下命令來查看當前 npm 用戶了:

  1. npm whoami 

如果正確顯示了剛才注冊的用戶名,說明登錄成功了。然后就使用以下命令來創建 npm 模塊:

  1. npm init 

執行上述命令后,會引導你創建一個package.json文件,包括名稱、版本、作者這些信息等。

創建模塊

這里要提一下,為什么要寫一個自定義模塊。因為 React Native 雖然實現了很多 Native 組件,并且提供了豐富的 API,但是有些原生庫還是不支持的,而且有很多開源的組件和庫是面向原生的,因此要想在 React Native 中使用這些組件和庫就需要自己定義一個模塊,這樣也方便別人集成。接下來我們直接進入正題。寫一個 React Native 中可以使用的自定義模塊。在命令行中執行

  1. react-native init AwesomeProject 

初始化一個 React Native 項目。這里以 Android 為例,用 Android Studio 選擇菜單 File->open 打開 AwesomeProject 文件夾下的 android 文件夾,然后選擇 File -> New -> New Module,選擇創建一個 Android Library,如圖:

如圖所示,這里新建了一個 Library module,接下來點擊 finish 就可以看到如下的目錄結構:

 

 

 

然后將所需要依賴的 jar 放到 libs 目錄下,這里以使用 jpush-sdk 為例,將官網上下載的 libs 復制到 libs 下,把相關的資源文件放到 res 文件夾下,再把 AndroidManifest 文件內容復制過來,更改一下包名,***在 build.gradle 中配置一把,如下(這里要注意把 targetSdkVersion 改成 22,在23上運行可能會閃退):

  1. apply plugin: 'com.android.library' 
  2. android {     
  3.   compileSdkVersion 23     
  4.   buildToolsVersion "23.0.2"     
  5.   defaultConfig {         
  6.     minSdkVersion 16         
  7.     targetSdkVersion 22         
  8.     versionCode 1         
  9.     versionName "1.0"         
  10.     manifestPlaceholders = [                 
  11.       JPUSH_APPKEY: "yourAppKey",  //在此修改JPush的AppKey                     
  12.       APP_CHANNEL: "developer-default"      //應用渠道號         
  13.     ]     
  14.   }     
  15.   lintOptions {         
  16.     abortOnError false         
  17.     warning 'InvalidPackage'     
  18.   }     
  19.   sourceSets {         
  20.     main {             
  21.       jniLibs.srcDirs = ['libs']         
  22.     }     
  23. repositories {     
  24.   mavenCentral() 
  25.  
  26. dependencies {     
  27.   compile fileTree(dir: 'libs', include: ['*.jar'])     
  28.   compile "com.facebook.react:react-native:+" 

 

到此為止,我們已經完成了***步操作,接下來需要寫 Native 和 JS 交互的代碼,可以參考我的這篇文章中 JS 調用 Native 以及 Native 調用 JS 部分,這里不再贅述。假設我們已經完成了 Native 部分代碼,我們如何才能在 JS 中讓他人能夠通過 import 的方式調用我們的 JS 代碼,從而調用 Native 呢?首先進入 my-react-library 文件夾,然后在終端執行

  1. npm init 

生成 package.json 文件(注意這里的 name 字段,這里是別人引用你的模塊的名字),然后再創建一個 index.js 文件,這是 node 模塊的 JS 入口,這里推薦使用 Sublime Text 進行 JS 的編寫。這里以 jpush-react-native 為例:

jpush-react-native/index.js 部分代碼

  1. import {NativeModules, Platform, DeviceEventEmitter} from 'react-native'
  2.  
  3. // 通過 NativeModules 找到我們在 Native 定義的 JPushModule 類 
  4. const JPushModule = NativeModules.JPushModule; 
  5.  
  6. export default class JPush { 
  7.  
  8.     /** 
  9.      * Android only 
  10.      * 初始化JPush 必須先初始化才能執行其他操作 
  11.     */ 
  12.     static initPush() { 
  13.         JPushModule.initPush(); 
  14.     } 
  15. } 

 

上面定義了一個 initPush 方法,initPush 實際上調用了 JPushModule 中定義的 initPush 方法,其他方法與此類似,本質上都是通過 NativeModules 調用了 Native 提供的方法。

發布

到此為止,我們已經完成了 React Native 自定義模塊。現在可以發布我們的自定義模塊了。在 package.json 所在的目錄下執行

  1. npm publish 

就可以把我們的自定義模塊上傳到 npm 庫了。每次更新版本時,需要改動 package.json 中的 version 值,然后再執行 npm publish 即可。

使用

在 React Native 目錄下,執行:

  1. npm install my-react-library --save 

安裝完成后就會把這個模塊保存到 node_modules 文件夾下,由于我們的模塊是一個 Android Library 項目,所以在 Native 中還需要配置一下。主要是添加項目依賴:

someone's react-native project/some module/build.gradle

  1. dependencies {     
  2.   compile fileTree(dir: "libs", include: ["*.jar"])     
  3.   compile "com.android.support:appcompat-v7:23.0.1"     
  4.   compile "com.facebook.react:react-native:+"  // From node_modules    
  5.   // 在 dependecies 中加入自定義模塊  
  6.   compile project(':my-react-library'

 

然后在 settings.gradle 中也要配置一下:

someone's react-native project/settings.gradle

  1. include ':app'':my-react-library' 
  2. project(':my-react-library').projectDir = new File(rootProject.projectDir, '../node_modules/my-react-library/android'

 

在 MainActivity 中將自定義的 Package 添加進去:

MainActivity.java

  1. ... 
  2. mReactInstanceManager = ReactInstanceManager.builder()                 
  3. .setApplication(getApplication())                 
  4. .setBundleAssetName("index.android.bundle")                 
  5. .setJSMainModuleName("react-native-android/index.android")                 
  6. .addPackage(new MainReactPackage()) 
  7. //添加自定義的 package 
  8. .addPackage(new MyReactPackage()) 
  9. ... 

 

如果是 RN 0.29.0 以上版本,則應在 MainApplication 中添加:

MainApplication.java

  1. @Overrideprotected List<ReactPackage> getPackages() {     
  2. return Arrays.<ReactPackage>asList(             
  3.     new MainReactPackage(),             
  4.     new MyReactPackage()     
  5.   ); 

 

到此為止我們完成了 Native 部分的配置(完成后 sync 一下),接下來就可以使用了。 別人要使用我們的模塊時,就可以這樣寫:

someone.js

  1. //這里的 'my-react-library'是在 package.json 定義的 name 
  2. // 這樣就可以 
  3. import MyModule from 'my-react-library' 
  4.  
  5. export default class SomeClass  extends React.Component { 
  6.     componentDidMount() { 
  7.       // 調用 index.js 中定義的 doSomething() 
  8.       MyModule.doSomething(); 
  9.     } 
  10. } 

 

責任編輯:龐桂玉 來源: 極光推送的博客
相關推薦

2022-06-06 09:28:36

ReactHook

2012-11-19 11:07:42

IBMdw

2019-12-02 21:29:45

Keras神經網絡TensorFlow

2021-07-01 11:07:49

Swift 自定義操作符

2012-05-18 10:52:20

TitaniumAndroid模塊自定義View模塊

2020-11-19 10:50:43

ImportPython代碼

2009-07-03 18:20:45

VSTS 2010網絡

2016-11-23 16:48:20

react-nativandroidjavascript

2023-01-29 08:00:00

Instagram濾鏡圖片編輯

2021-07-16 11:00:40

Django用戶模型Python

2009-04-28 13:25:36

Ajax函數Java

2013-03-28 16:59:56

Android開發自定義TitleBar

2021-07-26 09:00:08

ReactHooks 項目

2021-03-09 15:23:45

鴻蒙HarmonyOS應用開發

2024-04-11 08:30:05

JavaScript數組函數

2016-12-07 17:45:44

Linux文件

2019-09-10 09:12:54

2020-09-18 10:12:24

KotlinTCP網絡協議

2024-08-01 17:20:55

2021-01-06 05:25:56

項目Springboot應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜视频 | 精品熟人一区二区三区四区 | 请别相信他免费喜剧电影在线观看 | 在线观看av网站永久 | 国产乱码精品1区2区3区 | 欧美www在线观看 | 国产精品二区三区在线观看 | www日韩高清 | av看片网站| 精品久久伊人 | 一区二区三区视频在线免费观看 | 欧美精品一区二区三区在线 | 久久国色| 国产一区二区在线91 | 久久一级大片 | 国产精品污污视频 | 久久午夜精品福利一区二区 | 国产高清在线观看 | 国产精品一区一区 | 亚洲九九| 久久免费精品 | 久久久精 | 亚洲国产精品一区二区三区 | 99久久免费精品国产男女高不卡 | 日韩精品一区二区三区视频播放 | av中文在线播放 | 天天爱av | 欧美久久国产精品 | 国产精久久久 | 一区二区日韩 | 日韩成人在线一区 | 色偷偷888欧美精品久久久 | 国产色网站 | 亚洲国产成人精品女人 | 日本在线网站 | 中文字幕一区二区在线观看 | 国产精品国产 | 欧美极品在线播放 | 日韩一级黄色毛片 | 久草中文网 | 国产精品a免费一区久久电影 |