React-Native 出现也有一段时间了,其实我们在一些应用中已经接触过基于它的或效果类似于它的App,如手机淘宝。在每年双十一时我们会发现没有更新app也会有一些不同的界面。当然你可能认为WebView也可以做到这些。但实际上RN与WebView是不同的,RN的控件正如其名字中的Native描述,是原生的。还有据说微信的小程序也是基于RN做的。甚至有人说RN是移动开发的未来。就本人看来,RN确实在UI开发上提供了一种新的思路,新生的东西学一些没有什么坏处,万一赶上时代了呢?

进入正题。在RN中文网上看了原生模块的的介绍,按着原文的指导敲了一遍,发现有些不太一样特此在这记录分享一下。

我发现我的排版跟shi一样

首先在这里说明一下,我是先在Android Studio(AS)中新建的空白工程,然后再一步步搭建RN的,如果客官是Clone的RN的demo工程然后修改的,建议还是观看官方教程。

(假设电脑中已经装好RN的环境了)

①、进入工程根目录:npm init(可以直接在AS的Terminal中npm init)

②、npm install –save react react-native(执行完这条指令后注意了,会让你输入一系列信息,跟着输入就好,默认的直接enter键,这步生成package.json)。

③、在package.json的script字段加入”start”: “node node_modules/react-native/local-cli/cli.js start”(注意该加逗号的地方加逗号)

④、根目录手动创建index.android.js,然后添加一堆代码。

以上步骤我基本粗略说说,可以看官网教程嵌入到已有应用

接下来的问题出现概率就比较大了

⑤、在自己工程build.gradle(app)中添加依赖

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

⑥、在工程Build.grade(Project)中添加(注意:如果你的node_modules文件夹在工程根目录中,就是$rootDir/node_modules/react-native/android”的格式)。

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

⑦、接下来就是添加权限声明,注册调试用的Activity,一定在Application标签下注册,然后添加一些原声代码什么的,可以直接看上面的嵌入的官网链接,还是直奔主题

开始封装我们的ToastJS原声模块。

这个模块也是模仿官方教程来的。

⑧、注册模块之前官方说的都没什么问题,可以照着做都是一样的。然后注册模块这里,我们创建了一个自己模块专属的类。

package cn.scrovor.gogoo.Modules;import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class ScrovorReactPackage implements ReactPackage {@Overridepublic List<Class<? extends JavaScriptModule>> createJSModules() {return Collections.emptyList();}@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Collections.emptyList();}@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {List<NativeModule> modules = new ArrayList<>();modules.add(new ToastJS(reactContext));return modules;}
}

然后官方说在MainApplication中进行返回该Package信息,但我们自己写的可能根本就没有啊?!

其实自己写的可以在这里进行同样操作。

mReactRootView = new ReactRootView(this);mReactInstanceManager = ReactInstanceManager.builder().setApplication(getApplication()).setBundleAssetName("index.android.bundle").setJSMainModuleName("index.android").addPackage(new MainReactPackage()).addPackage(new ScrovorReactPackage()).setUseDeveloperSupport(BuildConfig.DEBUG).setInitialLifecycleState(LifecycleState.RESUMED).build();

然后就java部分的就完成了。

⑨、在JS部分封装成模块,原官方没有说清怎么封装,以及封装模块如何放置。这里说一下。
根目录新建 Toast.js文件,放入如下代码:

'use strict';import {NativeModules} from 'react-native';// ToastJS 对应自己写的原生控件export default NativeModules.ToastJS;

然后再index.android.js中调用

import ToastJS from './ToastJS.js';
...
const onButtonPressed = () =>{ToastJS.show("my native Component");
};

当然你也可以自己新建一个文件夹放置自己的原声模块,然后import时路径写对就可以了。

Demo的GitHub地址,有帮助的话记得Star奥。老铁没毛病吧。

React-Native 自封装原生模块相关推荐

  1. React Native使用指南-原生模块

    有时候App需要访问平台API,但React Native可能还没有相应的模块封装:或者你需要复用Objective-C.Swift或C++代码,而不是用JavaScript重新实现一遍:又或者你需要 ...

  2. React Native使用指南-原生UI组件

    在如今的App中,已经有成千上万的原生UI部件了--其中的一些是平台的一部分,另一些可能来自于一些第三方库,而且可能你自己还收藏了很多.React Native已经封装了大部分最常见的组件,譬如Scr ...

  3. 【React Native】在原生和React Native间通信(RN调用原生)

    一.从React Native中调用原生方法(原生模块) 原生模块是JS中也可以使用的Objective-C类.一般来说这样的每一个模块的实例都是在每一次通过JS bridge通信时创建的.他们可以导 ...

  4. rn+与android+交互,React native 与Android原生交互方式(一)

    前言## 最近在做React Native开发的时候避免不了的需要原生模块和JS之间进行交互,其实RN和原生的通信大致分为两种情况:一种是Android主动向RN端发送事件和数据,另外一种是RN端被动 ...

  5. Android方法调用实体类的值,React Native调用Android原生方法和传值

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 创建react native 项目:react-native init callAndroidProject cd ca ...

  6. React Native Fetch封装那点事...

    每一门语言都离不开网络请求,有自己的一套Networking Api.React Native使用的是Fetch. 今天我们来谈谈与Fetch相关的一些事情. purpose 通过这篇文章,你将了解到 ...

  7. 【React Native】iOS原生导航跳转RN页面

    上一篇介绍了React Native使用react-navigation进行导航跳转页面,现在我们介绍下原生iOS中怎么导航进一个新的React Native页面. 一.原生跳转React Nativ ...

  8. React Native调用Android原生代码实现车牌识别功能【附效果图附源码】

    转载请注明出处,原文地址:http://blog.csdn.net/lucherr/article/details/71908180 这段时间研究了下React Native,Facebook推出的, ...

  9. RN (React Native)相对原生有哪些优势?

    1. RN 一套代码可以跨平台使用: 2. 减少人力,节省时间: 3. 避免了Android和IOS版本发布时间不同步: 4. 开发新功能迅速: 5. 更方便的增量更新.

最新文章

  1. 黑苹果没有找到触控板为什么还是能用_为什么Macbook触控板体验领先Windows那么多,却难以取代鼠标?...
  2. android标题背景色,设置标题背景颜色
  3. 对js面向对象的理解
  4. [HDCTF2019]MFC
  5. 方法:如何获取操作系统所有分区(逻辑驱动器)
  6. htaccess文件,强大的功能
  7. Javascript 创建书签小工具 (bilibili视频下载为例)
  8. PyQt5入门——手把手教你配置环境,快速上手GUI程序开发(Anaconda+PyCharm+Qt Designer+pyuic)
  9. nginx linux windows 忽略大小写_React 基础 在 Windows 下使用 React , 你需要注意这些问题...
  10. 爬取 4400 条淘宝洗发水数据,拯救你的发际线!(附代码和数据集)
  11. Altera PLL失锁的原因
  12. matlab画图函数之plot【matlab图行绘制一】
  13. java如何获取wsdl文件,如何使用Java获取WSDL文件中的复杂类型?
  14. 安装d3dx9 43.dll后显示 请确保该二进制存储在指定的路径中
  15. 已解决:Execution failed for task Unable to delete directory:D:\VPRO\Vo\build\.....
  16. 一段让你虎躯一震的代码
  17. 为什么不带图发不了朋友圈?微信发朋友圈不带图片怎么发
  18. 加拿大Introspect I3C 协议分析仪(Analyzer)及训练器(Exerciser)
  19. 【上海 >>无锡】自驾两日游
  20. redis常用命令集合

热门文章

  1. ChianVis2019_Day1
  2. Web信息抽取——SWDE数据集简介(翻译)
  3. ESET NOD32
  4. gensim学习-word2vec model
  5. CardView卡片式登录界面
  6. PPT全文一次性更改英文和中文字体
  7. uint16,uint32是什么?
  8. 若笔沟的“蜜作”寻蜜之旅
  9. docker 入门 —— docker容器数据卷volumes-from
  10. 中国央企国企信息化热点