解決React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function
總覽
當(dāng)我們?yōu)樵氐?code>onClick屬性傳遞一個(gè)值,但是該值卻不是函數(shù)時(shí),會(huì)產(chǎn)生"Expected onClick listener to be a function"報(bào)錯(cuò)。為了解決該報(bào)錯(cuò),請(qǐng)確保只為元素的onClick屬性傳遞函數(shù)。

這里有個(gè)例子來(lái)展示錯(cuò)誤是如何發(fā)生的。
// App.js
const App = () => {
// ?? Warning: Expected `onClick` listener to be a function
// instead got a value of `string` type.
return (
<div>
<button onClick="console.log('Click')">Click</button>
</div>
);
};
export default App;
當(dāng)按鈕的onClick屬性的期望值是函數(shù)時(shí),我們?yōu)槠鋫鬟f了一個(gè)字符串,從而導(dǎo)致了錯(cuò)誤的產(chǎn)生。
傳遞函數(shù)
為了解決該報(bào)錯(cuò),請(qǐng)確保只為元素的onClick屬性傳遞函數(shù)。
// App.js
const App = () => {
const handleClick = () => {
console.log('button clicked');
};
return (
<div>
<button onClick={handleClick}>Click</button>
</div>
);
};
export default App;
我們向元素的onClick屬性傳遞了一個(gè)函數(shù),順利的解決了這個(gè)錯(cuò)誤。然而,注意到我們?cè)谙?code>onClick屬性傳遞函數(shù)時(shí)并沒(méi)有調(diào)用該函數(shù)。
我們傳遞了函數(shù)的引用,而不是函數(shù)調(diào)用的結(jié)果。
如果傳遞了函數(shù)調(diào)用的結(jié)果,那么事件處理器將在頁(yè)面加載時(shí)立即被調(diào)用,這不是我們想要的。
傳遞參數(shù)
你通常需要做的事情是向事件處理器傳遞一個(gè)參數(shù)。你可以通過(guò)使用一個(gè)內(nèi)聯(lián)箭頭函數(shù)來(lái)做到這一點(diǎn)。
// App.js
import {useState} from 'react';
const App = () => {
const [count, setCount] = useState(0);
const handleClick = (event, num) => {
console.log(event.target);
console.log('button clicked');
setCount(count + num);
};
return (
<div>
<h2>{count}</h2>
<button onClick={event => handleClick(event, 100)}>Click</button>
</div>
);
};
export default App;
handleClick函數(shù)是用event對(duì)象和一個(gè)數(shù)字參數(shù)調(diào)用的。需要注意的是,我們沒(méi)有向onClick屬性傳遞調(diào)用handleClick函數(shù)的結(jié)果。
我們實(shí)際上是將一個(gè)函數(shù)傳遞給它,該函數(shù)以event對(duì)象為參數(shù),并返回以event和數(shù)字100為參數(shù)的handleClick函數(shù)的調(diào)用結(jié)果。

不要把調(diào)用handleClick函數(shù)的結(jié)果傳遞給onClick屬性,這是非常重要的。因?yàn)槿缛暨@樣的話(huà),當(dāng)頁(yè)面加載時(shí),該函數(shù)會(huì)被立即調(diào)用,這可能會(huì)導(dǎo)致無(wú)限的重新渲染循環(huán)。
以上就是解決React報(bào)錯(cuò)Expected `onClick` listener to be a function的詳細(xì)內(nèi)容,更多關(guān)于React報(bào)錯(cuò)onClick function的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
react-native動(dòng)態(tài)切換tab組件的方法
在APP中免不了要使用tab組件,有的是tab切換,也有的是tab分類(lèi)切換.這篇文章主要介紹了react-native動(dòng)態(tài)切換tab組件的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-07-07
react antd實(shí)現(xiàn)動(dòng)態(tài)增減表單
antd是react流行的ui框架庫(kù),本文主要介紹了react antd實(shí)現(xiàn)動(dòng)態(tài)增減表單,分享給大家,感興趣的小伙伴們可以參考一下2021-06-06
詳解React中多種組件通信方式的實(shí)現(xiàn)
在React中,組件之間的通信是一個(gè)非常重要的話(huà)題,React提供了幾種方式來(lái)實(shí)現(xiàn)跨組件通信,下面小編將詳細(xì)講講其中幾種通信方式,并提供實(shí)際的代碼示例,需要的可以參考下2023-11-11
React Native提供自動(dòng)完成的下拉菜單的方法示例
這篇文章主要為大家介紹了React Native提供自動(dòng)完成的下拉菜單的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
在React項(xiàng)目中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的錨點(diǎn)目錄定位
錨點(diǎn)目錄定位功能在長(zhǎng)頁(yè)面和文檔類(lèi)網(wǎng)站中非常常見(jiàn),它可以讓用戶(hù)快速定位到頁(yè)面中的某個(gè)章節(jié),本文講給大家介紹一下React項(xiàng)目中如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的錨點(diǎn)目錄定位,文中有詳細(xì)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-09-09

