我目前正在学习的React钩与在线课程。
教师将匿名回调函数传递给onClick处理程序
return (
<div className="counter">
<button className="counter-action decrement" onClick={() => decrementScore()}> - </button>
<span className="counter-score">{score}</span>
<button className="counter-action increment" onClick={() => incrementScore()}> + </button>
</div>
);
但是我不明白为什么需要匿名回调,为什么不能直接传递函数本身。
以下是我尝试过的,它工作正常,没有错误。
const Counter = () => {
const [score, setScore] = React.useState(0);
const incrementScore = () => {
setScore(prevScore => prevScore + 1);
}
const decrementScore = () => {
setScore(prevScore => prevScore > 0 ? prevScore - 1 : 0);
}
return (
<div className="counter">
<button className="counter-action decrement" onClick={decrementScore}> - </button>
<span className="counter-score">{score}</span>
<button className="counter-action increment" onClick={incrementScore}> + </button>
</div>
);
}
1条答案
按热度按时间ff29svar1#
这里不需要额外的匿名回调。按你的方式做就可以了。
在以下情况下,拥有这样的匿名回调 * 将 * 非常有用:
this
上下文,并且函数没有被绑定。例如,在一个类组件中,下面的代码看起来很可疑:(see here,用于主题的多页)
或者,您可能希望省略作为第一个参数传递给事件处理程序的default React event,但是,在本例中,
incrementScore
或decrementScore
中没有使用任何参数,因此这并不重要。此外,请注意,您只需要使用状态设置器的回调形式,例如:
当封闭函数closes over的状态值可能过时时--如果之前已经调用了状态setter,并且组件还没有重新呈现。但是对于一个只在单击按钮时改变一次的状态,状态值不可能过时。所以,如果你愿意,在这种情况下,你可以简化
至