React Native原生模块的基本使用
来源:互联网 发布:淘宝借贷利息 编辑:程序博客网 时间:2024/05/31 19:02
有时候React Native不能满足我们对app的需求,我么需要原生的代码来封装控件。
以简单Toast控件为例:
1.首先创建一个原生模块(继承了ReactContextBaseJavaModule的Java类)。在此类中实现Toast的显示方法。
package com.demo;import android.content.Context;import android.widget.Toast;import com.facebook.react.bridge.ReactApplicationContext;import com.facebook.react.bridge.ReactContextBaseJavaModule;import com.facebook.react.bridge.ReactMethod;public class MyNativeModules extends ReactContextBaseJavaModule { private Context context; public MyNativeModules(ReactApplicationContext reactContext) { super(reactContext); context = reactContext; }//ReactContextBaseJavaModule要求派生类实现getName()方法, 返回的是字符串名字,// 这个名字在JavaScript端标记这个模块。注意:RN中已经内置了ToastAndroid的模块,所以练习时不要使用 //这个名字否则会出错。 @Override public String getName() { return "MyNativeModule"; }//Toast的show方法 @ReactMethod //要导出一个方法给JavaScript用,Java方法需要使用注解:@ReactMethod,返回类型必须为void public void rnCallNative(String msg) { Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); }}
2.注册模块。我们需要在应用的package类的createNativeModules方法中添加这个模块。
package com.demo;import com.facebook.react.ReactPackage;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 MyReactPackage implements ReactPackage { //把我们要导出的模块放在modules中 @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new MyNativeModules(reactContext)); return modules; } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); }}
3.在MainApplication中把我们写好的package加入到getPackages()方法中,其他的不需要改动
package com.demo;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 com.facebook.soloader.SoLoader;import java.util.Arrays;import java.util.List;public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), //添加我们创建好的package new MyReactPackage() ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); }}
4.在RN中的使用:
首先import NativeModules: import {NativeModules} from ‘react-native’
调用:NativeModules.MyNativeModule.rnCallNative('hello world');
阅读全文
1 0
- React Native原生模块的基本使用
- react native使用原生模块
- react native使用原生模块
- react native 学习笔记----使用Android的原生模块
- Android React Native使用原生模块
- Android React Native使用原生模块
- React Native 原生UI组件的基本使用
- React Native十四:原生模块
- React Native使用指南-原生模块
- React Native创建原生模块
- React-Native与原生的模块桥接(一)
- React Native使用原生组件
- React-Native 原生模块(iOS)调用
- react-native 调用原生模块详解
- React Native添加Android原生模块
- React Native调用Android原生模块
- React Native 原生模块封装、发布、调用
- React Native 中的 Android 原生模块
- CSS选择器中 后代选择器和派生选择器有什么区别?
- oozie扩展action
- Spring编程<五>
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
- 算法设计与分析
- React Native原生模块的基本使用
- 不相交集ADT-概述
- window ,linux yaf创建目录
- poj1847Tram 最短路 floyd dijkstra
- 田忌赛马
- Ionic+Angularjs+Cordova开发跨平台混合式移动应用
- 前端基本功—js第三天
- Android 代码优化工具FindBugs
- 如何让机器拥有人类的智慧?| 论文访谈间 #09