Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React报错之Expected `onClick` listener to be a function

React报错之Expected `onClick` listener to be a function

作者头像
chuckQu
发布于 2022-08-19 08:45:24
发布于 2022-08-19 08:45:24
1.3K00
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

正文从这开始~

总览

当我们为元素的onClick属性传递一个值,但是该值却不是函数时,会产生"Expected onClick listener to be a function"报错。为了解决该报错,请确保只为元素的onClick属性传递函数。

expected-onclick-listener-to-be-function.png

这里有个例子来展示错误是如何发生的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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属性传递函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.js
const App = () => {
  const handleClick = () => {
    console.log('button clicked');
  };

  return (
    <div>
      <button onClick={handleClick}>Click</button>
    </div>
  );
};

export default App;

我们向元素的onClick属性传递了一个函数,顺利的解决了这个错误。然而,注意到我们在向onClick属性传递函数时并没有调用该函数。

我们传递了函数的引用,而不是函数调用的结果。

如果传递了函数调用的结果,那么事件处理器将在页面加载时立即被调用,这不是我们想要的。

传递参数

你通常需要做的事情是向事件处理器传递一个参数。你可以通过使用一个内联箭头函数来做到这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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函数的调用结果。

onclick-listener-function.gif

不要把调用handleClick函数的结果传递给onClick属性,这是非常重要的。因为如若这样的话,当页面加载时,该函数会被立即调用,这可能会导致无限的重新渲染循环。

参考资料

[1]

https://bobbyhadz.com/blog/react-expected-onclick-listener-to-be-function: https://bobbyhadz.com/blog/react-expected-onclick-listener-to-be-function

[2]

Borislav Hadzhiev: https://bobbyhadz.com/about

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React技巧之设置onClick监听器
原文链接:https://bobbyhadz.com/blog/react-onclick-link[1]
chuckQu
2022/08/19
8380
React技巧之设置onClick监听器
React报错之You provided a `checked` prop to a form field
当我们在多选框上设置了checked 属性,却没有onChange 处理函数时,会产生"You provided a checked prop to a form field without an onChange handler"错误。为了解决该错误,可以使用defaultChecked 属性,或者在表单字段上设置onChange 属性。
chuckQu
2022/09/20
1.8K0
React报错之You provided a `checked` prop to a form field
React报错之React.Children.only expected to receive single React
当我们把多个子元素传递给一个只期望有一个React子元素的组件时,会产生"React.Children.only expected to receive single React element child"错误。为了解决该错误,将所有元素包装在一个React片段或一个封闭div中。
chuckQu
2023/02/16
1.4K0
React报错之React.Children.only expected to receive single React
React报错之React Hook 'useEffect' is called in function
为了解决错误"React Hook 'useEffect' is called in function that is neither a React function component nor a custom React Hook function",可以将函数名的第一个字母大写,或者使用use作为函数名的前缀。比如说,useCounter使其成为一个组件或一个自定义钩子。
chuckQu
2022/09/20
1.4K0
React报错之React Hook 'useEffect' is called in function
React技巧之检查复选框是否选中
原文链接:https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked[1]
chuckQu
2022/08/19
1.7K0
React技巧之检查复选框是否选中
React技巧之设置input值
原文链接:https://bobbyhadz.com/blog/react-set-input-value-on-button-click[1]
chuckQu
2022/08/19
2.2K0
React技巧之设置input值
React技巧之调用子组件函数
原文链接:https://bobbyhadz.com/blog/react-call-function-in-child-component[1]
chuckQu
2022/08/19
2.2K0
React技巧之调用子组件函数
React报错之React hook useState cannot be called in class component
当我们尝试在类组件中使用useState 钩子时,会产生"React hook 'useState' cannot be called in a class component"错误。为了解决该错误,请将类组件转换为函数组件。因为钩子不能在类组件中使用。
chuckQu
2022/09/20
2.2K0
React报错之React hook useState cannot be called in class component
React技巧之有条件地添加属性
原文链接:https://bobbyhadz.com/blog/react-conditional-attribute[1]
chuckQu
2022/08/19
1.4K0
React技巧之添加或移除类
原文链接:https://bobbyhadz.com/blog/react-add-remove-class-on-click[1]
chuckQu
2022/08/19
1K0
React技巧之添加或移除类
React技巧之发出http请求
原文链接:https://bobbyhadz.com/blog/react-send-request-on-click[1]
chuckQu
2022/08/19
8920
React技巧之发出http请求
React技巧之将函数作为props传递
原文链接:https://bobbyhadz.com/blog/react-typescript-pass-function-as-prop[1]
chuckQu
2022/08/19
1.3K0
React技巧之将函数作为props传递
React报错之react component changing uncontrolled input
原文链接:https://bobbyhadz.com/blog/react-component-changing-uncontrolled-input[1]
chuckQu
2022/08/19
4310
React报错之react component changing uncontrolled input
React报错之No duplicate props allowed
原文链接:https://bobbyhadz.com/blog/react-jsx-no-duplicate-props[1]
chuckQu
2022/08/19
2750
React报错之Too many re-renders
产生"Too many re-renders. React limits the number of renders to prevent an infinite loop"错误有多方面的原因:
chuckQu
2023/02/13
3.6K0
React报错之Too many re-renders
React技巧之在state数组中添加元素
原文链接:https://bobbyhadz.com/blog/react-push-to-state-array[1]
chuckQu
2022/08/19
3K0
React技巧之在state数组中添加元素
React报错之Parameter 'event' implicitly has an 'any' type
当我们不在事件处理函数中为事件声明类型时,会产生"Parameter 'event' implicitly has an 'any' type"错误。为了解决该错误,显示地为event参数声明类型。比如说,在input元素上,将处理change事件声明类型为React.ChangeEvent<HTMLInputElement> 。
chuckQu
2022/09/20
1.2K0
React报错之Parameter 'event' implicitly has an 'any' type
React技巧之设置data属性
原文链接:https://bobbyhadz.com/blog/react-set-data-attribute[1]
chuckQu
2022/08/19
1.8K0
React技巧之设置data属性
React报错之`value` prop on `input` should not be null
原文链接:https://bobbyhadz.com/blog/react-value-prop-on-input-should-not-be-null[1]
chuckQu
2022/08/19
7630
React报错之`value` prop on `input` should not be null
React 设计模式 0x3:Ract Hooks
React Hooks 是在函数式组件中使用的生命周期方法,React Hooks 在 React 16.8 中被引入。在类组件中的生命周期方法已被合并成 React Hooks,React Hooks 无法在类组件中使用。
Cellinlab
2023/05/17
1.8K0
相关推荐
React技巧之设置onClick监听器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验