javascript - 如何将参数传递给 useSate 的 setState 函数?
问题描述
我在学习反应时遇到了这个codePen https://codepen.io/enmanuelduran/pen/LgMomz 。我尝试进行一些更改,结果出现“重新渲染过多”错误。
代替
const handleClick = () => setCount(count + 1);
我试图将参数传递给 handleClick 函数
const handleClick = (x) => setCount(x + count + 1);
在我的退货声明中我改变了
<button onClick={handleClick}>
我加了
<button onClick={handleClick(1)}>
当我运行它时,我得到
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
解决方案
因为这里:
<button onClick={handleClick(1)}>
您是handleClick
立即调用,而不是在单击按钮时调用,因此在每次渲染时都会调用该函数。然后这会触发重新渲染,你会得到你的“无限”循环。
尝试使用一个匿名函数来调用你的handleClick
:
<button onClick={() => handleClick(1)}>
或者
<button onClick={e => handleClick(1)}>
例如,如果您需要使用事件对象。
值得一提的是,您之前的行 ( )在单击按钮时<button onClick={handleClick}>
调用该函数,但将事件对象作为第一个参数传递。handleClick
推荐阅读
- c# - FileStream 不保存数组文件
- oracle - 插入到 oracle DB 很慢 - JDBC
- vba - xlPastevalues 给了我一个对象定义的错误 VBA
- java - “受保护”修饰符没用吗?
- python - 如何使用循环用相关值填充 3D 矩阵?
- floating-point - 将浮点数转换为包含所有数字的字符串
- webpack - 如何在 DOM 准备好之前开始动态加载 JS?
- asp.net-mvc - AspNetZero - .NET Core 2.0 MVC 版本 - 添加新控制器时出错
- javascript - 如何将对象字符串拆分为单个字符串?VueJS 和计算属性
- xamarin - Visual Studio 2017、Xamarin 和更新包