Поэтому я столкнулся с проблемой, когда React не объединяет несколько вызовов setState () внутри асинхронной c функции (обычно React делает это автоматически вне асинхронной c функции). Это означает, что когда мой код выполняется, множественные последовательные вызовы setState () конфликтуют друг с другом, первый setState () вызывает обновление компонента, а второй setState () происходит до того, как компонент успел перемонтировать, и я получаю ошибку Msgstr "Невозможно выполнить обновление состояния React для неустановленного компонента". Я провел некоторое исследование и обнаружил, что это ожидаемое поведение, но я ничего не нашел о том, как решить проблему.
Вот пример кода (не запускается) просто для визуализации того, что я пытаюсь сказать. В этом случае строки setData (response.data); и setLoading (false); конфликт и причина ошибки.
Мне нужен какой-то способ сделать два вызова atomi c.
import React, { useState } from "react";
import Button from "@material-ui/core/Button";
const Demo = () => {
const [loading, setLoading] = useState(false);
const [data, setData] = useState({});
const fetchData = async () => {
setLoading(true);
const response = await callAPI();
if (response.status === 200) {
setData(response.data);
}
setLoading(false);
};
return (
<div>
<Button disabled={loading} onClick={() => fetchData()}>
Fetch Data
</Button>
<p>{JSON.stringify(data)}</p>
</div>
);
};
export default Demo;