我正在使用React Native,我想从不同的类调用一个函数,但当我试图这样做时,它显示出一些错误.

Class A

import B from './B.js';

class A extends Component {
    _onItemPressed(item){
        B.abc();
    }

    render() {
      return (
         <TouchableHighlight
            underlayColor={Colors.colors.lightgrey}
            style={{padding: 15}}
            onPress={this._onItemPressed.bind(this)}>
         <Text>Click Me !</Text>
         </TouchableHighlight>
      );
    }
}

Class B

class B extends Component {

    abc(){
      alert('Hello World');
    }

    render() {
      return (
         <View>
            <Text>Welcome to React Native</Text>
         </View>
      );
    }
}

但按下A类"undefined is not a function (evaluating 'B.default._abc()')"中的按钮后会出现错误消息

请仔细阅读我的帖子,并提出一些解决方案.

谢谢

推荐答案

您有两个选项,要么使用对象,要么使用类名,让我们从对象开始

class B {
  abc() {
    alert("Hello World");
  }
}
const b = new B();
export default b;

因此,当你调用这个文件时,你可以访问函数abc,如下所示

import b from './B.js';
class A extends Component {
    _onItemPressed(item){
        b.abc();
    }
...

另一种方法是使用类,如下所示

class B{}
B.abc = function(){
    alert("Hello World");
}
module.exports = {
  functions: B
};

因此,当你调用这个文件时,你可以访问函数abc,如下所示

import b from './B.js';
class A extends Component {
    _onItemPressed(item){
        b.functions.abc();
    }
...

注意:B类不应该是一个组件,您可以将其用作助手类.

此外,您还可以增强使用singleton模式处理对象的方式,正如我在中已经提到的

UPDATE:如果你坚持使用组件而不是类函数,你可以通过引用调用它,如下所示:

export default class B extends Component {
  constructor(props) {
    super(props);
    this.abc = this.abc.bind(this);
   }
    abc(){
      alert('Hello World');
    }

    render() {
      return null
    }
}

现在在一个组件中,你可以通过引用调用B

import B from "./B.js";
class A extends Component {
  _onItemPressed(item) {
    this._b.abc();
  }
  render() {
    return (
      <TouchableHighlight
        underlayColor={Colors.colors.lightgrey}
        style={{ padding: 15 }}
        onPress={this._onItemPressed.bind(this)}
      >
        <Text>Click Me !</Text>
        <B ref={ref => (this._b = ref)} />
      </TouchableHighlight>
    );
  }
}

React-native相关问答推荐

try 使用JWT-DECODE解码令牌时出错

单击react 本机时如何从同一屏幕更改内容

如何在 React / React Native 中使用 Emscripten 编译的 JavaScript

如何在 react-native 中使用 Animated 制作 svg 动画

如何获取 iOS 版本?

在 React Native Paper 中更改 TextInput 的文本 colored颜色

如何在 React Native 的嵌套 Touchable 中传播touch 事件?

如何从 Firebase 获取所有设备令牌?

react-native: 'adb' 不是内部或外部命令、可运行程序或批处理文件

如何更改 React Native(android)应用程序的远程推送通知图标

在 React Native 中计算两个 lat+lng 坐标之间的距离?

React-Native 应用程序的 Jest 测试 Animated.View

React Native - 如何判断 UI/元素?

如何将组件中的props传递给 FlatList renderItem

如何在react native应用程序名称中添加空格?

在 React Native 中无法滚动到 ScrollView 的底部

如何使用 Typescript 在无状态组件上设置 navigationOptions

Android 构建错误AndroidManifest.xml requires a placeholder substitution

如何在react-native中设置 FlatList 的刷新指示器?

[React-Native][Jest]SyntaxError: Unexpected token import