【发布时间】:2021-04-18 12:59:38
【问题描述】:
我有几个例子。
第一
const { window } = props;
const container =
window !== undefined ? () => window().document.body : undefined;
这意味着如果窗口不是undefined,它将在正文中显示一些内容。
但是使用下面有什么区别??
const container =
window !== undefined ? window().document.body : undefined;
其次
在 jsx 中,我设置了 onChange 事件,这两者的工作方式不同。
const handleClick = () => { console.log('hi'); }
<input onChange={handleClick} type="text"/>
//=> this operates well when input tag value is changed.
<input onChange={()=>handleClick} type="text"/>
//=>it doesn't work even when input tag value is changed.
- 已编辑
现在我清楚地了解了这些差异。
1. <input onChange={handleClick} type="text"/>
2. <input onChange={() => handleClick()} type="text"/>
//1,2 work same. But when you have to pass 'event' or some parameters to
//function, you can use second way.
//or If you wanna put more than one functions on `onChage` event,
2-1. <input onChange={() => {handleClick(); handleCheck();}} type="text"/>
3. <input onChange={handleClick()} type="text"/>
//This will call function immediately (when component mounted)
// even 'input' tag is not changed.
4. <input onChange={()=> handleClick} type="text"/>
//This just returns `handleClick` function so `handleClick` will not be operated.
【问题讨论】:
-
在第一种情况下
container是一个函数,在第二种情况下不是。你没有显示你在哪里使用container,所以很难说哪个是“正确的”——尽管我不认为这是一个明显的功能,因为我怀疑这个值是否会改变(如果它曾经改变过) ,在 React 的上下文中重新渲染,因此container的重新计算应该自动发生)。 -
对于底部的
onChange示例 -onChange需要一个函数,该函数(可选)将事件对象作为参数。假设handleClick是这样一个处理函数,那么onChange={handleClick}是正确的,onChange={()=>handleClick}什么也不做,只是返回处理函数,而不调用它。 -
现在我想我理解了您的一般问题 - 简而言之:如果
a是某种值,那么() => a是一个不带参数的函数,并且在执行时总是返回a没有其他的。例如,数字 2 和始终返回 2 的函数之间是有区别的。 -
哦,我完全明白了!谢谢!!
标签: javascript reactjs arrow-functions