react native js中调用native中的方法
来源:互联网 发布:网络商标是什么意思 编辑:程序博客网 时间:2024/05/22 09:01
react native js中调用native中的方法
这里主要涉及到几个类
java
/**
<ul><li>Base class for Catalyst native modules that require access to the {@link ReactContext}</li>
<li>instance.
*/
ReactContextBaseJavaModule //native的类继承该类
2.ReactPackage—-所有的继承自ReactContextBaseJavaModule的子类,都会注册到这个ReactPackage里维护的一个集合里。
3.关键的类ReactApplication,里面只有一个方法ReactNativeHost,该抽象类中主要实现方法getPackages,这里会获取在上面ReactPackage中的列表,我们将会在这注册自己书写的packages,这里默认会注册一个MainReactPackage。
具体代码流程
native端主要有三个类:
//module类public class TestDemoModule extends ReactContextBaseJavaModule { public TestDemoModule(ReactApplicationContext reactContext) { super(reactContext); } @Override public String getName() { return "TestDemoModule"; } @ReactMethod public void show(String str) { Toast.makeText(getReactApplicationContext(), str, Toast.LENGTH_SHORT).show(); }}
下面是package类,module会注册到modules这个集合里:
public class TestDemoPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new TestDemoModule(reactContext)); return modules; } @Override public List<Class<? extends JavaScriptModule>> createJSModules() { return Collections.emptyList(); } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); }}
下面就是在MainApplication中ReactNativeHost通过getPackages获取native端的注册类,
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(), new TestDemoPackage() ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); }
上面完成了整体的编写,下面是在js端的调用:
这里简单列出两种:
直接直接引入getName返回的名字,代码如下:
import { AppRegistry, StyleSheet, Text, View, TestDemoModule,} from 'react-native';var {NativeModules}=require('react-native');var testDemoModuleAndroid = NativeModules.TestDemoModule;//下面就可以调用了,testDemoModuleAndroid.show('Hello Toast of native');
直接引入NativeModules,这个就更简单了:
import { AppRegistry, StyleSheet, Text, View, NativeModules,} from 'react-native';//直接使用,是不是更简单NativeModules.TestDemoModule.show('成功调用原生方法');
总结
上面就是两种方法,还是很简单的吧,希望能给初学的同学参考。
阅读全文
0 0
- react native js中调用native中的方法
- React Native:JS调用Android本地方法
- React-Native:调用(Android)Native方法
- [Android中react-native调用Native]
- react-native 调用原生方法
- react-native 调用 native 步骤
- react native js调用android原生activity
- iOS native 调用 js 方法
- react-native--基础(方法调用)
- React Native之基础方法调用
- React-Native调用iOS原生方法
- react-native调用Android的原生方法
- React Native 新版 native call js的方法
- React Native:native传递参数到js中
- JAVA中native方法调用
- JAVA中native方法调用
- 【React Native】React Native的bind方法
- Android中webview js与native方法互相调用
- 解决使用tortoiseGit推送时每次输入账户和密码
- RxAndroid学习1
- VS、MVC框架的一点体会
- HashMap为什么是线程不安全的?
- 2017070506嵌入式开发系统概述和开发工具的使用
- react native js中调用native中的方法
- vue.js学习笔记
- 腾讯云centos7 安装lnmp实践
- 剑指offer题十
- 版本管理之gitlab实践教程:基础篇(5)
- C# 中的Invoke
- Linux查看物理CPU个数、核数、逻辑CPU个数
- “Beginning Python”(五)“Instant Markup 2”
- wget 下载整个网站,或者特定目录