網站首頁 編程語言 正文
解決React報錯Expected?`onClick`?listener?to?be?a?function_React
作者:Borislav?Hadzhiev ? 更新時間: 2022-12-29 編程語言總覽
當我們為元素的onClick
屬性傳遞一個值,但是該值卻不是函數時,會產生"Expected?onClick
?listener to be a function"報錯。為了解決該報錯,請確保只為元素的onClick
屬性傳遞函數。
這里有個例子來展示錯誤是如何發生的。
// 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;
當按鈕的onClick
屬性的期望值是函數時,我們為其傳遞了一個字符串,從而導致了錯誤的產生。
傳遞函數
為了解決該報錯,請確保只為元素的onClick
屬性傳遞函數。
// App.js const App = () => { const handleClick = () => { console.log('button clicked'); }; return ( <div> <button onClick={handleClick}>Click</button> </div> ); }; export default App;
我們向元素的onClick
屬性傳遞了一個函數,順利的解決了這個錯誤。然而,注意到我們在向onClick
屬性傳遞函數時并沒有調用該函數。
我們傳遞了函數的引用,而不是函數調用的結果。
如果傳遞了函數調用的結果,那么事件處理器將在頁面加載時立即被調用,這不是我們想要的。
傳遞參數
你通常需要做的事情是向事件處理器傳遞一個參數。你可以通過使用一個內聯箭頭函數來做到這一點。
// 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
函數是用event
對象和一個數字參數調用的。需要注意的是,我們沒有向onClick
屬性傳遞調用handleClick
函數的結果。
我們實際上是將一個函數傳遞給它,該函數以event
對象為參數,并返回以event
和數字100
為參數的handleClick
函數的調用結果。
不要把調用handleClick
函數的結果傳遞給onClick
屬性,這是非常重要的。因為如若這樣的話,當頁面加載時,該函數會被立即調用,這可能會導致無限的重新渲染循環。
原文鏈接:https://juejin.cn/post/7132845425647681572
相關推薦
- 2022-04-30 .Net?生成壓縮文件問題記錄(推薦)_實用技巧
- 2023-01-17 解讀MaxPooling1D和GlobalMaxPooling1D的區別_python
- 2021-12-16 .NET中的狀態機庫Stateless的操作流程_實用技巧
- 2023-07-02 Python?中的裝飾器實現函數的緩存(場景分析)_python
- 2022-11-02 Android?Studio模擬器運行apk文件_Android
- 2022-06-27 python中SSH遠程登錄設備的實現方法_python
- 2022-05-27 C++的STL中accumulate函數的使用方法_C 語言
- 2022-06-22 android選項卡TabHost功能用法詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支