" undefined不是一个函数"在ReactNative中创建android原生模块时

时间:2017-08-24 03:00:49

标签: react-native native-module

我跟随ReactNative Native Module Guide编写了可以在JS端使用的java类。导出的方法是showToastModule(导出为ToastAndroid)。 show方法如下:

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

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

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();
}

我遇到以下错误:&#34; undefined不是函数&#34;

enter image description here

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

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

有没有人知道我走错了哪一步?

EDIT ==========================

ReactNative中可能已有ToastAndroid,因此我将名称更改为MyToastExample。但是,现在错误变成了以下

enter image description here

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

2 个答案:

答案 0 :(得分:0)

this step中,检查您是否导入了正确的ToastModule,因为ReactNative还有一个名为ToastModule的类。

检查import com.facebook.react.modules.toast.ToastModule;

中是否存在此行*ReactPackage.java

答案 1 :(得分:0)

尝试使用import代替require

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

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

我遇到了undefined is not function错误。

但是,更改为:

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

为我解决了这个问题。

requireimport显然对模块有不同的对待。