Reactjs 在React Native中调用方法

Reactjs 在React Native中调用方法,reactjs,react-native,Reactjs,React Native,我很难理解什么似乎是一个简单的错误。 当我调用react组件AlarmList中定义的名为addNewAlarm的方法时,该方法调用this.showAlarms()。我认为这不会引起问题,但我得到一个错误未定义不是函数。这看起来应该非常简单,因为这就是在javascript中调用类方法的方式。我做错了什么 import React, { Component } from 'react'; ... export default class AlarmList extends React.Com

我很难理解什么似乎是一个简单的错误。 当我调用react组件AlarmList中定义的名为addNewAlarm的方法时,该方法调用this.showAlarms()。我认为这不会引起问题,但我得到一个错误
未定义不是函数
。这看起来应该非常简单,因为这就是在javascript中调用类方法的方式。我做错了什么

import React, { Component } from 'react';
...

export default class AlarmList extends React.Component {
  addNewAlarm() {
    this.showAlarms();
  }
  showAlarms() {
    alert('showing alarms');
  }
render() {
  return (
    <View>
      <Button
        title="Add An Alarm"
        onPress={this.addNewAlarm}
      />
    </View>
  );
 }
}
import React,{Component}来自'React';
...
导出默认类AlarmList扩展React.Component{
addNewAlarm(){
this.showAlarms();
}
showAlarms(){
警报(“显示警报”);
}
render(){
返回(
);
}
}
尝试绑定它

<View>
      <Button
        title="Add An Alarm"
        onPress={this.addNewAlarm.bind(this)}
      />
 </View>

尝试绑定它

<View>
      <Button
        title="Add An Alarm"
        onPress={this.addNewAlarm.bind(this)}
      />
 </View>

您需要将函数声明更改为

addNewAlarm = () => {
   this.showAlarms();
}
showAlarms = () => {
   alert('showing alarms');
}
或者像这样在构造函数中绑定它

constructor(props) {
   super(props);
   this.addNewAlarm = this.addNewAlarm.bind(this);
   this.showAlarms = this.showAlarms.bind(this);
   ...
}

希望这有帮助

您需要将函数声明更改为

addNewAlarm = () => {
   this.showAlarms();
}
showAlarms = () => {
   alert('showing alarms');
}
或者像这样在构造函数中绑定它

constructor(props) {
   super(props);
   this.addNewAlarm = this.addNewAlarm.bind(this);
   this.showAlarms = this.showAlarms.bind(this);
   ...
}
希望这有帮助

这是因为此上下文中的属于方法而不是类,并且在方法addNewAlarm()中没有定义此类方法。这是词法这个的更一般的问题

你可以用三种方法来解决它(你应该采用第一种方法,如果你不喜欢,那么你应该采用第二种方法)

  • 转换声明

    addNewAlarm(){ this.showAlarms(); }

  • 让宣言成为现实吧

    addNewAlarm(){ this.showAlarms(); }

  • 但是在类中编写一个构造函数

    constructor(props) {
      super(props)
      this.addNewAlarm = this.addNewAlarm.bind(this)
    }
    
  • (不推荐)这样调用时绑定addNewAlarm

    onPress={this.addNewAlarm.bind(this)}

  • 这是因为此上下文中的属于方法而不是类,并且在方法addNewAlarm()中没有定义此类方法。这是词法这个的更一般的问题

    你可以用三种方法来解决它(你应该采用第一种方法,如果你不喜欢,那么你应该采用第二种方法)

  • 转换声明

    addNewAlarm(){ this.showAlarms(); }

  • 让宣言成为现实吧

    addNewAlarm(){ this.showAlarms(); }

  • 但是在类中编写一个构造函数

    constructor(props) {
      super(props)
      this.addNewAlarm = this.addNewAlarm.bind(this)
    }
    
  • (不推荐)这样调用时绑定addNewAlarm

    onPress={this.addNewAlarm.bind(this)}


  • 这是一个约束问题吗?i、 e您需要使用一个类属性箭头函数或添加一个
    构造函数()
    this.addNewAlarm=this.addNewAlarm.bind(this)
    这是一个
    绑定问题吗?i、 e您要么需要使用类属性箭头函数,要么使用
    this.addNewAlarm=this.addNewAlarm.bind(this)