const Message = ({ id, avatar, instance }) => {
let [mounted, setMounted] = useState(false);
let [messagesList, setMessagesList] = useState([]);
let [isSending, setIsSending] = useState(false);
let [updated, setUpdated] = useState(false);
const onSubmit = useCallback(async ({ message }) => {
if (isSending) return
setIsSending(true)
await instance.post(`/dialogs/${id}/messages`, { body: message });
setUpdated(!updated);
setIsSending(false);
}, [isSending])
let myTimeout = setTimeout(function () {
setUpdated(!updated);
}, 35000);
useEffect(() => {
const fetchData = async () => {
const response = await instance.get(`/dialogs/${id}/messages`);
if (response.status === 200) {
if (mounted === false) {
setMessagesList(response.data.items);
setMounted(true);
} else {
if (response.data.items.length !== messagesList.length) {
setMessagesList(response.data.items);
console.log("STATE UPDATE");
}
for (let i = 0; i < response.data.items.length; i++) {
if (response.data.items[0].id !== messagesList[0].id) { // need effective method
setMessagesList(response.data.items);
console.log("STATE UPDATE");
}
}
}
}
}
fetchData();
return () => {
clearTimeout(myTimeout);
};
}, [updated, messagesList]);
if (mounted === false) {
return <div className="MessagesLoader"><Preloader isLoading={true} /></div>
}
...
Мне нужно оптимизировать этот код для запроса обычного пута + обновление и только 1 обновление в течение некоторого периода, но когда я запрашиваю какое-то новое сообщение через 40 секунд, оно не работает. Что может быть причиной? И это автоматически запрашивает не в моем периоде.