6

我正在按照ReactNative Native Module Guide编写可以在 JS 端使用的 java 类。导出的方法show来自类ToastModule(导出为ToastAndroid)。show方法如下:

public void show(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}

当我从 Button onPress 处理程序调用 ToastAndroid.show 时,toast 按钮的所有工作都会按预期出现。

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Button,
  NativeModules,
} from 'react-native';

const ToastAndroid = NativeModules.ToastAndroid

export default class App extends Component {

handleBTNPressed(){
  ToastAndroid.show('Awesome', ToastAndroid.SHORT);
}
render() {
  return (
    <View style={styles.container}>
      <Text style={styles.welcome}>
        Welcome to React Native!!
      </Text>
      <Button title='click me' onPress={()=>this.handleBTNPressed()}/>
    </View>
  );
 }
}

但是,当我进一步更改函数名称时

@ReactMethod
public void show(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}

@ReactMethod
public void showAgain(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}

我遇到以下错误:“未定义不是函数”

在此处输入图像描述

如果我添加新的导出方法,则会再次显示此错误,如下所示:

@ReactMethod
public void showAgain2(String message, int duration) {
    String mes = "Hi " + message;
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}

有谁知道我走错了哪一步?

编辑===========================

ToastAndroidReactNative 中可能已经有 a ,所以我将名称更改为MyToastExample. 但是,现在错误变为以下

在此处输入图像描述

有没有人遇到同样的问题?

4

2 回答 2

0

尝试使用import而不是require.

在我的情况下,我正在使用:

var Contacts = require( "react-native-unified-contacts" );

我得到了undefined is not function错误。

但是,更改为:

import Contacts from "react-native-unified-contacts"; 

为我解决了这个问题。

清楚requireimport区别对待模块。

于 2019-03-10T23:48:01.133 回答
0

这一步,检查你是否有 import 的权利ToastModule,因为 ReactNative 也有一个类 Called ToastModule

检查此行是否import com.facebook.react.modules.toast.ToastModule;存在*ReactPackage.java

于 2017-08-24T05:10:14.970 回答