React native 反应本机计数器,函数未定义 我稍微改变了默认的App.js,从NASIC的快速入门指南中做出反应,我试图做一个计数器,每次点击屏幕中间的按钮时,计数器都会从1开始计数。当我运行下面的代码时,我得到了这个错误:警告:失败的道具类型:道具“onPress”在“Button”中标记为必需,但其值为“undefined”。。。。问题是它无法识别此项。在函数renderButton==>{}内按OnButton。我认为这可能是关键字this的问题,因为我听说它指向父函数而不是父对象,但我相信这仍然有效。。。我不知道为什么没有。任何帮助都将不胜感激,谢谢

React native 反应本机计数器,函数未定义 我稍微改变了默认的App.js,从NASIC的快速入门指南中做出反应,我试图做一个计数器,每次点击屏幕中间的按钮时,计数器都会从1开始计数。当我运行下面的代码时,我得到了这个错误:警告:失败的道具类型:道具“onPress”在“Button”中标记为必需,但其值为“undefined”。。。。问题是它无法识别此项。在函数renderButton==>{}内按OnButton。我认为这可能是关键字this的问题,因为我听说它指向父函数而不是父对象,但我相信这仍然有效。。。我不知道为什么没有。任何帮助都将不胜感激,谢谢,react-native,React Native,从“React”导入React,{Component}; 进口{ 站台 样式表, 文本 看法 按钮 }从“反应本机”; const指令=Platform.select{ ios:'按Cmd+R重新加载,\n'+ “用于开发菜单的Cmd+D或shake”, android:“双击键盘上的R以重新加载,\n”+ '为开发菜单摇动或按下菜单按钮', }; 导出默认类应用程序扩展组件{ 构造器{ 超级作物; 此.state={ 计数:1 }; } renderButton==>{ 回来 ; } onBu

从“React”导入React,{Component}; 进口{ 站台 样式表, 文本 看法 按钮 }从“反应本机”; const指令=Platform.select{ ios:'按Cmd+R重新加载,\n'+ “用于开发菜单的Cmd+D或shake”, android:“双击键盘上的R以重新加载,\n”+ '为开发菜单摇动或按下菜单按钮', }; 导出默认类应用程序扩展组件{ 构造器{ 超级作物; 此.state={ 计数:1 }; } renderButton==>{ 回来 ; } onButtonPress==>{ var previous=this.state.count; this.state.count=previous+1; } 渲染==>{ 回来 {this.renderButton} 计数:{this.state.Count} 要开始,请编辑App.js {指令} ; } } const styles=StyleSheet.create{ 容器:{ 弹性:1, 为内容辩护:“中心”, 对齐项目:“居中”, 背景颜色:“F5FCFF”, }, 欢迎:{ 尺寸:20, textAlign:'中心', 差额:10, }, 说明:{ textAlign:'中心', 颜色:“333333”, marginBottom:5, },
}; 您正在调用函数,而不是传递引用

renderButton = () => {
    return(
        <Button
            onPress={this.onButtonPress} // <-- you were invoking the function here instead of passing the reference
            title="BUTTON"
            color="#841584"
        />
    );
}
或者,您可以传递一个匿名函数来调用您的方法

renderButton = () => {
    return(
        <Button
            onPress={() => this.onButtonPress()}
            title="BUTTON"
            color="#841584"
        />
    );
}

React认为它未定义的原因是函数执行没有返回值,因此返回未定义。您的函数立即运行,而不是在onPress事件之后运行。因此,React将函数的结果用作onPress事件处理程序,而不是函数本身。

在React中更新状态时,需要使用setState。下面是使用您的代码的示例:

onButtonPress = () => {
    var newCount = this.state.count + 1;
     this.setState({
      count: newCount
    });
  }

是的,也是这样。但这并不是他犯错误的原因