【发布时间】:2019-07-06 06:23:59
【问题描述】:
正在学习本机反应并学习更多关于 javascript 的知识,所以我仍然不了解它的许多行为。我创建了一个按钮组件,使用 TouchableOpacity 及其道具 onPress。 为了让它工作,我必须将我想要执行的功能作为道具发送,但由于我的经验不足,我在这里摔倒了。
我正在发送一个console.log,当我按下按钮时它会被激活。所以我直接在自己定义的props中传递了console.log,但是在我点击按钮的时候并没有生效,而是在代码初始化的时候执行的。另一方面,当我传递了一个包含console.log的箭头函数时,它在点击按钮的那一刻就被执行了。
为了更清楚,我将展示我的代码:
这是我的按钮组件:
const Button = ({ onUserPress, children, color }) => {
const state = {
};
return (
<TouchableOpacity onPress={ onUserPress } style={styles.buttonStyle} >
<Text style={styles.textStyle}>
{children}
</Text>
</TouchableOpacity>
);
};
我这样称呼他们:
<Button onUserPress={ console.log("hello") }>Something</Button>
这是在初始化我的应用程序时执行的,按下按钮时什么也没有发生。
另一方面,当我使用相同的组件,但我通过 console.log 箭头函数时,像这样:
<Button onUserPress={ ()=>{console.log("hello")} }>Something</Button>
只有当我按下按钮组件时才会执行控制台日志。
有人可以向我解释为什么行为不同吗?函数式编程的世界对我来说是全新的,这些事情对我来说似乎很奇怪。据我了解,两者都是功能,所以对我来说它们没有什么区别(显然,从我无知的角度来看)。导致行为不同的区别是什么?
【问题讨论】:
-
console.log("hello")是其中的函数调用。()=>{console.log("hello")}是函数定义 -
第一个看起来像是错字。我不认为这是故意的。
标签: javascript react-native ecmascript-6