何时在 react onClick 中调用函数与函数()?[复制]

When to call function vs function() in react onClick? [duplicate]

提问人:NealVDV 提问时间:2/12/2017 更新时间:2/12/2017 访问量:7536

问:

我对何时在 react 组件中调用函数有疑问。有时,当我不向函数调用添加括号时,我的代码会中断,但并非总是如此。我这里缺少某种规则吗?

不起作用

// Callback of parent component
<Link onClick={this.props.OnNavigate}>
    A link
</Link>

确实有效

// Callback of parent component
<Link onClick={this.props.OnNavigate()}>
    A link
</Link>

// Callback for function of component
<li onClick={this.toggleDepartments}>other example</li>
JavaScript 反应JS

评论

0赞 Prakash Sharma 2/12/2017
我认为第一个不起作用,因为这个 react 类不知道 this.props.onNavigate 是函数还是属性。因此,我们需要用括号来称呼它。
0赞 Prakash Sharma 2/12/2017
this.toggleDepartment 属于这个类,所以 react 类认为它是函数,所以我们不需要任何括号。不过我不确定。需要搜索一下。
0赞 Felix Kling 2/12/2017
@Prakashsharma:不,事实并非如此。

答:

-3赞 Allen 2/12/2017 #1

最好使用 parens 调用该函数,因为当您创建一个单独的 js 文件并将它们与 script 标签链接在一起时,您可以确定它正在调用该特定函数。

评论

0赞 NealVDV 2/12/2017
谢谢!您是否有任何文件/帖子引用了此内容,以便我了解更多信息?
0赞 Allen 2/12/2017
我有两本来自 Interactive Python 的外部“书”(这是我的教授制作的!),您可以自己测试并阅读它。这个是给初学者的,但它仍然有很多有用的js东西:interactivepython.org/runestone/static/webfundamentals/......另一个是更复杂的js,它涵盖了ECMAscript 6:interactivepython.org/runestone/static/JS4Python/index.html
30赞 Felix Kling 2/12/2017 #2

foo()正在调用 引用的函数。 本身只是对函数的引用,它不调用函数。foofoo

因此,如果要此时此地调用该函数,则需要使用括号。
如果要将函数传递给其他代码,以便它可以调用该函数,则必须省略括号。事件处理程序就是这种情况。 应在 click 事件发生时(即将来的某个时间)调用,而不是在呈现组件时调用。
this.props.OnNavigation

评论

0赞 Prakash Sharma 2/12/2017
this.props.OnNavigation 不是对函数的引用吗?通过编写 onClick={this.props.OnNavigate()},我们不是在渲染期间调用它而不是 onClick 吗?
0赞 Felix Kling 2/12/2017
没错。
0赞 Prakash Sharma 2/12/2017
但是,根据问题,onClick={this.props.OnNavigate()}>是如何工作的?
3赞 Felix Kling 2/12/2017
我不认为这是一个正确的评估。它可能“看起来”有效。当然,也有可能返回一个函数,该函数是实际的事件处理程序,但这种可能性可能较小。尽管如此,无论情况如何,我的说法都是正确的。onNavigation
0赞 Prakash Sharma 2/12/2017
是的,我认为你的陈述是对的,是有道理的。但这件事让我感到困惑。