日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

解決React報錯Expected?`onClick`?listener?to?be?a?function_React

作者:Borislav?Hadzhiev ? 更新時間: 2022-12-29 編程語言

總覽

當我們?yōu)樵氐?code>onClick屬性傳遞一個值,但是該值卻不是函數(shù)時,會產(chǎn)生"Expected?onClick?listener to be a function"報錯。為了解決該報錯,請確保只為元素的onClick屬性傳遞函數(shù)。

這里有個例子來展示錯誤是如何發(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;

當按鈕的onClick屬性的期望值是函數(shù)時,我們?yōu)槠鋫鬟f了一個字符串,從而導致了錯誤的產(chǎn)生。

傳遞函數(shù)

為了解決該報錯,請確保只為元素的onClick屬性傳遞函數(shù)。

// App.js
const App = () => {
  const handleClick = () => {
    console.log('button clicked');
  };
  return (
    <div>
      <button onClick={handleClick}>Click</button>
    </div>
  );
};
export default App;

我們向元素的onClick屬性傳遞了一個函數(shù),順利的解決了這個錯誤。然而,注意到我們在向onClick屬性傳遞函數(shù)時并沒有調(diào)用該函數(shù)。

我們傳遞了函數(shù)的引用,而不是函數(shù)調(diào)用的結(jié)果。

如果傳遞了函數(shù)調(diào)用的結(jié)果,那么事件處理器將在頁面加載時立即被調(diào)用,這不是我們想要的。

傳遞參數(shù)

你通常需要做的事情是向事件處理器傳遞一個參數(shù)。你可以通過使用一個內(nèi)聯(lián)箭頭函數(shù)來做到這一點。

// 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對象和一個數(shù)字參數(shù)調(diào)用的。需要注意的是,我們沒有向onClick屬性傳遞調(diào)用handleClick函數(shù)的結(jié)果。

我們實際上是將一個函數(shù)傳遞給它,該函數(shù)以event對象為參數(shù),并返回以event和數(shù)字100為參數(shù)的handleClick函數(shù)的調(diào)用結(jié)果。

不要把調(diào)用handleClick函數(shù)的結(jié)果傳遞給onClick屬性,這是非常重要的。因為如若這樣的話,當頁面加載時,該函數(shù)會被立即調(diào)用,這可能會導致無限的重新渲染循環(huán)。

原文鏈接:https://juejin.cn/post/7132845425647681572

欄目分類
最近更新