Проблема, с которой вы столкнулись, вероятно, связана с тем, как React обрабатывает обновление состояний. В вашем коде состояние попапа могло бы не обновляться должным образом из-за асинхронной природы состояния в React. Давайте разберем несколько возможных причин и решений, чтобы ваш попап правильно отображался после успешной отправки формы.
1. **Проверьте, не вызывается ли `showPopup` в неверный момент**: Убедитесь, что вызов `showPopup` происходит после фактической отправки формы. Подождите, пока сервер вернет ответ, и только потом отображайте попап.
2. **Асинхронность состояния**: Состояния в React обновляются асинхронно, а это значит, что сразу после вызова `setPopupMessage` или `setPopupType` вы не сможете получить их обновленные значения. Попробуйте использовать колбеки, чтобы удостовериться, что попап открывается с правильными значениями.
3. **Проверка отрисовки**: Убедитесь, что ваше модальное окно рендерится в зависимости от `showPopupMessage`. Например, как-то так:
```jsx
{showPopupMessage && (
<Popup message={popupMessage} type={popupType} onClose={closePopup} />
)}
```
4. **Пример корректной реализации**: Вот улучшенный пример вашего кода:
```jsx
const [popupMessage, setPopupMessage] = useState('');
const [popupType, setPopupType] = useState('');
const [showPopupMessage, setShowPopupMessage] = useState(false);
const showPopup = (message, type) => {
console.log('showPopup called with:', { message, type });
setPopupMessage(message);
setPopupType(type);
setShowPopupMessage(true);
setTimeout(() => {
console.log('Popup timeout finished');
setShowPopupMessage(false);
// reset только после закрытия
setPopupMessage('');
setPopupType('');
}, 5000);
};
const handleSubmit = async () => {
try {
// Асинхронная отправка формы
await sendForm(); // замените на вашу функцию отправки
showPopup('Form submitted successfully', 'success');
} catch (error) {
showPopup('Error submitting form', 'error');
}
};
useEffect(() => {
console.log('popupMessage changed to:', popupMessage);
console.log('popupType changed to:', popupType);
}, [popupMessage, popupType]);
// Убедитесь, что попап рендерится
return (
<div>
<form onSubmit={handleSubmit}>
{/* Ваша форма */}
<button type="submit">Submit</button>
</form>
{showPopupMessage && (
<Popup message={popupMessage} type={popupType} onClose={() => setShowPopupMessage(false)} />
)}
</div>
);
```
5. **Проверка модального окна**: Убедитесь, что ваш компонент `Popup` правильно принимает пропсы и отображает сообщение и тип.
Если эти шаги не решают проблему, пожалуйста, предоставьте дополнительную информацию о том, как вы рендерите модальное окно и как обрабатываете успешную отправку формы, чтобы помочь вам более детально.