reactjs - 使用钩子会导致无限循环
问题描述
我有一个模式组件,当用户打开网站时,它只能出现一次。这是我的代码:
import React, { useState } from 'react';
import { Modal, Button } from 'antd';
function WelcomeModal() {
const [visibility, setVisibility] = useState(true);
function handleVisibility() {
setVisibility(!visibility);
}
return (
<div>
<Modal
title="Vertically centered modal dialog"
centered
visible={visibility}
onOk={handleVisibility()}
onCancel={handleVisibility()}
></Modal>
</div>
)
}
export default WelcomeModal;
我创建了一个名为visibility
最初为 true 的状态,在用户单击Cancel
或单击OK
模式后,我尝试将可见性更改为 false,因此模式关闭。问题是我收到以下错误:
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
我怎样才能解决这个问题 ?
解决方案
看起来您的意思是将handleVisibility
函数作为onOk
andonCancel
道具传递给 Modal 组件,但您不小心用括号调用它()
。
这意味着当组件第一次渲染时,它会调用该函数,该函数会更改状态,这会触发重新渲染,然后再次调用该函数,依此类推。
推荐阅读
- reactjs - 如何从用于渲染 React 应用程序的容器节点获取属性?
- python - 在 Python 中什么更有效:`key not in list` 或 `not key in list`?
- python - 子线程内的多处理
- javascript - 累积 jQuery html 元素以添加到 DOM
- sql - 从redshift sql中的varchar中提取值
- python - 从 for 循环返回 false 否则在 F# 中继续
- database - 执行触发器期间出现未知错误
- serial-port - 在 Ubuntu 16.04 上可以读取,但不能写入串行端口
- javascript - 如何给每个单独的 div 随机背景颜色?
- javascript - 更改颜色 InputLabel 材质 UI