我是React
的新生。还有,对不起,我英语不好。
3天前,我想在单击按钮时更改按钮值的state
。所以,我只是简单地这样编码。
/* SKIP CODE */
const [state, setState] = useState("");
/* SKIP CODE*/
<button onClick={setState("×pan=PT1H")}>1 hour</button>
/* SKIP CODE*/
但这不起作用。所以我在谷歌上搜索了3天,终于这样解决了。
<button onClick={() => {setState("×pan=PT1H")}}>1 hour</button>
但是,我不知道为什么。你能很容易地解释我吗?
在中
<button onClick={setState("×pan=PT1H")}>1 hour</button>
您正在将setState("×pan=PT1H")
的结果分配给onClick
,因此当按钮调度onClick方法时,它不会执行任何函数,因为它分配了一个值,而不是函数。
但是,在<button onClick={() => {setState("×pan=PT1H")}}>1 hour</button>
中,您要将函数分配给onClick,因此每次按钮调度方法onClick
时,它都会执行函数setState。
React on render调用函数调用,因此它被用作变量并按需调用以进行性能优化。
const callMe = () => {
console.log('i am called when the button was clicked not on render');
}
<Button onClick={callMe} />
onClick需要一个回调函数,您需要传递该函数。在您传递箭头函数作为回调的情况下,您也可以将一个普通函数传递给onClick事件。
function onBtnClick(){
//do the action here.
}
<button onClick={onBtnClick}>Click Me!</button>
或者你可以使用箭头功能:
const onBtnClick = () => {
//do the action here.
}
<button onClick={onBtnClick}>Click Me!</button>
或者,您可以内联传递一个箭头函数。
<button onClick={() => { //do the action here }}>Click Me!</button>
如果您的函数返回一行代码,就像您的情况一样,则不需要括号:
<button onClick={() => setState("×pan=PT1H")}>1 hour</button>