Оптимизировать useEffect для запросов ax ios - PullRequest
0 голосов
/ 08 марта 2020
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 секунд, оно не работает. Что может быть причиной? И это автоматически запрашивает не в моем периоде.

...