【问题标题】:React Native - accessing 'this' in Button onPress causes app to crashReact Native - 在按钮 onPress 中访问“this”会导致应用程序崩溃
【发布时间】:2018-08-07 15:45:08
【问题描述】:

几天前我开始学习 React Native,但一直被这个看似简单的问题所困扰。

我有一个注册表单,我只是想在用户按下提交后将表单的值记录到控制台。问题是当我按下按钮时,应用程序会挂起大约一分钟然后崩溃。没有错误或日志,所以我不知道它为什么会崩溃,尽管我知道当我尝试在 onPress 函数中调用“this”时会发生这种情况。

这是我的问题的一个简单示例:

import React, { Component } from 'react';
import { View, Button } from 'react-native';

export default class Home extends Component {
  render() {
    return (
      <View style={{flex: 1}}>
          <Button
            title="Submit"
            onPress={this.onPress}
          />
      </View>
    );
  }

  onPress = () => {
    console.log(this);
  }
}

运行此代码并按下按钮会导致我的应用崩溃。但是,将console.log(this) 更改为console.log('test') 可以防止应用崩溃。

我的两个问题是:

  • 在 onPress 函数中获取对组件“this”的引用的正确方法是什么?
  • 我的应用崩溃时如何查看日志/错误?

【问题讨论】:

    标签: reactjs react-native ecmascript-6


    【解决方案1】:

    尝试记录this 可能会导致大量输出,甚至可能是周期性的。为什么需要打印整个对象?能不能缩小范围。您的 onPress 方法使用 Class Fields 语法正确绑定到 this

    【讨论】:

    • 谢谢。这实际上解决了我的问题。在我的原始代码中,我试图使用console.log(this._form) 将表单记录到控制台(我正在使用 tcomb-form-native)。出于某种原因,将其更改为 console.log(this._form.getValue()) 使其工作。我是移动开发的新手,来自网络开发,在网络开发中我从来没有遇到过这样的问题。再次感谢!
    • 原理是一样的——转储太多东西,尤其是循环引用,你会导致事情崩溃。智能手机可能是功能齐全的计算机,但它们使用的资源仍然少得多。很高兴它有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多