首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写onPress={onPress()}与生活有关吗?

写onPress={onPress()}与生活有关吗?
EN

Stack Overflow用户
提问于 2022-01-09 13:50:59
回答 3查看 46关注 0票数 0

如果我在下面编写onPress,当我单击该按钮时,控制台将编写测试。但是,如果我编写onPress(),它会在页面呈现时在控制台上写一个测试。写onPress()和生活有什么关系吗?这就是为什么它在页面呈现时不被调用的原因吗?

代码语言:javascript
复制
import React from 'react';
import { Button } from 'react-native';

const Screen = () => {

    const onPress = () =>{
        console.log('test')
    }

    return (
        <Button title='button' onPress={onPress()}/>
    )
};

export default Screen;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-09 13:56:42

不,onPress={onPress()}不是一个立即调用的函数表达式(.¹)--它是一个函数调用:您正在调用onPress并使用它的返回值作为onPress支柱的值。所以在呈现组件时会看到控制台消息,因为函数调用是在呈现过程中发生的,而在按下按钮时没有看到它,因为按钮上没有press处理程序(因为onPress不返回一个)。

若要在按下按钮时调用onPress,请使用onPress={onPress} (之后不使用() ):

代码语言:javascript
复制
return (
    <Button title='button' onPress={onPress}/>
);

它将您的onPress函数分配给onPress支柱,告诉按钮在按下按钮时调用它。

生平是您同时创建和调用函数的地方,如下所示:

代码语言:javascript
复制
(() => console.log("Hi"))();

() => console.log("Hi")部件创建函数,(...)()部件调用它。

票数 4
EN

Stack Overflow用户

发布于 2022-01-09 13:56:55

onPress处理程序需要一个it willpress事件上执行的函数。

因为在第一种情况下,传递函数对象而不是执行它,所以它运行得很好。

但是在第二种情况下,由于您自己执行,onPress希望它将从您的onPress事件的输出中接收函数。

您可以在下面更改它,它会工作的。

代码语言:javascript
复制
<Button title='button' onPress={() => onPress()}/>

代码语言:javascript
复制
<Button title='button' onPress={onPress()}/>


const onPress = () => {
     
    return () => console.log('test'); 
};
票数 1
EN

Stack Overflow用户

发布于 2022-01-09 13:56:26

在JS中,当您想要创建一个箭头函数时,应该总是指出它,所以现在,例如

代码语言:javascript
复制
return (
    <Button title='button' onPress={onPress()}/>
  )

将自动执行,因为它是一个assignmentOperation,因此您可以使用

代码语言:javascript
复制
return (
    <Button title='button' onPress={() => onPress()}/>
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70641934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档