#reactjs
#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.
Как я могу это исправить?
Комментарии:
1. Вы имеете в виду передать
Modal
компоненту эти ссылки на функции, а не вызывать их во время рендеринга. Удалите()
из каждого —onOk={handleVisibility}
. Вызов функции во время рендеринга обновляет состояние = бесконечный цикл.
Ответ №1:
Похоже, вы хотите передать handleVisibility
функцию в модальный компонент в качестве реквизитов onOk
и onCancel
, но вы случайно вызываете ее со скобками ()
.
Это означает, что при первом рендеринге компонента он вызывает функцию, которая изменяет состояние, что запускает повторный запуск, который затем вызывает функцию снова и так далее.
Комментарии:
1. Да, это сработало именно так, большое спасибо, с этого момента я буду уделять этому внимание.