Компонент будет сохранять состояние даже после размонтирования
Я создаю форму обратной связи с Formik и хочу перейти от компонентов класса к перехватчикам, но столкнулся с упомянутыми трудностями.
function Feedback(props) {
const [fileInfo, setFileInfo] = useState("");
const [feedbackStatus, setFeedbackStatus] = useState("");
let timer = null;
useEffect(() => {
const status = props.feedbackResponse.status;
if (status) {
if (status >= 200 && status < 300) {
setFeedbackStatus("success");
timer = setTimeout(() => {
props.history.goBack();
}, 2500);
} else if (status === "pending") {
setFeedbackStatus("pending");
} else {
setFeedbackStatus("error");
}
}
return () => {
clearInterval(timer);
}
}, [props.feedbackResponse.status]);
// ...code ommited for brevity
}
Этот эффект успешно выполняется после отправки моей формы в ожидании ответа сервера. Feedback
компонент - это react-router
модальный компонент, если это имеет значение. Однако, если я снова открою этот модал, вместо новой формы я увижу сообщение об успехе. В моем return
я условно отображаю сообщение об успехе, если feedbackStatus === "success"
или форма, которая в зависимости от ответа сервера может отображать сообщение об ошибке в противном случае. Мой компонент класса отлично работает с этим кодом:
componentDidUpdate(prevProps) {
const status = this.props.feedbackResponse.status;
if (prevProps.feedbackResponse.status !== status) {
if (status >= 200 && status < 300) {
this.setState({feedbackStatus: "success"});
this.timer = setTimeout(() => {
this.props.history.goBack();
}, 2500);
} else if (status === "pending") {
this.setState({feedbackStatus: "pending"});
} else {
this.setState({feedbackStatus: "error"});
};
}
}
componentWillUnmount() {
clearInterval(this.timer);
}
Ожидаемый результат: повторное открытие этого модального компонента после успешной отправки формы должно отобразить новую форму, но при этом отобразится предыдущий статус отправки. Это заставляет меня думать, что я вообще не размонтирую Feedback
компонент, но где тогда моя ошибка?