博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ReactNative] js 和 native 怎么通讯(eg. Toast)
阅读量:4228 次
发布时间:2019-05-26

本文共 4447 字,大约阅读时间需要 14 分钟。

native 怎么写

自定义module

//ToastModule.javapackage com.retest;import android.widget.Toast;import com.facebook.react.bridge.ReactApplicationContext;import com.facebook.react.bridge.ReactContextBaseJavaModule;import com.facebook.react.bridge.ReactMethod;import java.util.HashMap;import java.util.Map;import javax.annotation.Nullable;public class ToastModule  extends ReactContextBaseJavaModule{
private static final String DURATION_SHORT_KEY = "SHORT"; private static final String DURATION_LONG_KEY = "LONG"; public ToastModule(ReactApplicationContext reactContext) { super(reactContext); } @Override public String getName() { return "TomToast"; } @Nullable @Override public Map
getConstants() { final Map
constants = new HashMap<>(); constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT); constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG); return constants; } @ReactMethod public void show(String message,int duration){ Toast.makeText(getReactApplicationContext(),message,duration).show(); }}

添加到MyReactPackage

//MyReactPackage.javapackage com.retest;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 {
@Override public List
createNativeModules( ReactApplicationContext reactContext) { List
modules = new ArrayList<>(); modules.add(new ToastModule(reactContext)); return modules; } @Override public List
createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); }}

在MainApplication里面添加

//MainApplication.javapackage com.retest;import android.app.Application;import com.facebook.react.ReactApplication;import com.AlexanderZaytsev.RNI18n.RNI18nPackage;import com.facebook.react.ReactNativeHost;import com.facebook.react.ReactPackage;import com.facebook.react.shell.MainReactPackage;import com.facebook.soloader.SoLoader;import com.st.TomCameraPackage;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
getPackages() { return Arrays.
asList( new MainReactPackage(), new RNI18nPackage(), new TomCameraPackage(), new MyReactPackage() ); } @Override protected String getJSMainModuleName() { return "index"; } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); }}

js 怎么调用

定义模块,引用native

//MyToast.js'use strict'; import {NativeModules} from 'react-native';export default NativeModules.TomToast; //"TomToast"要和native中定义的一致。

在自定义js中引用之前的js模块

//settings.js 用来使用MyToast.js/** * Sample React Native App * https://github.com/facebook/react-native * @flow */import React from 'react';import {    StyleSheet,    Button,    View} from 'react-native';import Ionicons from 'react-native-vector-icons/Ionicons';import TomToast from './MyToast';const _onButtonPressed=()=>{    TomToast.show('This is from Android Native', TomToast.SHORT);}export default class Settings extends React.Component {
static navigationOptions = { drawerLabel: 'Settings', drawerIcon: ({tintColor, focused}) => (
), } render() { return (

简单关系连线

你可能感兴趣的文章
s3c2410 中断异常处理(转)
查看>>
对张孝祥C语言试题其中一题的探讨 (转载)
查看>>
一些好的网站
查看>>
map.txt
查看>>
volatile关键字
查看>>
ZLG7290键盘驱动开发心得
查看>>
WinCE中的虚拟地址和实际的物理地址是如何对应
查看>>
Microsoft Windows CE 的内存使用
查看>>
makefile入门
查看>>
中科院计算所Goddon CPU诞生历史!牛!
查看>>
ispPAC
查看>>
迷你型的 Linux 系统
查看>>
为人处世小技巧
查看>>
C++ 堆、栈及静态数据区详解
查看>>
VC++6.0编译环境介绍
查看>>
74芯片特性分类使总汇
查看>>
ttl和cmos的区别
查看>>
常见逻辑电平标准
查看>>
逻辑电平的含义
查看>>
103个Windows XP运行命令
查看>>