Pull to refresh

Comments 5

Данную часть можно упростить:

    useEffect(() => {
        let mounted = true;

        async function getData() {
            setError(false);
            setLoading(true);
            try {
                const response = await fetch(url + ‘users/${id}’);
                let data = await response.json();
                if (mounted) {
                    setUser(data);
                    setError(false);
                } 
            } catch (e) {
                setError(true);
            }
            setLoading(false);
        }

        const interval = setInterval(() => getData(), 1000);

        return () => {
            clearInterval(Interval);
            mounted = false;
            }
        }, [id]);
  • const interval = setInterval(() => getData(), 1000); -> const interval = setInterval(getData, 1000);;

  • часть сетов можно убрать в finnaly у try catch;

  • а если заменить mounted на useEffectLayout?

Если смотреть только на список решаемых проблем и не привязываться к Redux, то для решения данных задач есть ещё как минимум одна библиотека - React Query. Вы пробовали их сравнивать? Ибо, если Redux не нужен, зачем тащить весь тулкит?

Знаком с ней но мне лично больше нравится react-swr, впрочем они почти полный аналог.
Был эксперимент когда пробовал обойтись вообще без стора. У нас же есть все данные с бэка. При этом производные переменные от бэка помещал в кастомные хуки типо такого:

function useCustomData() {
  const data1 = useSwr(..)
  const data2 = useSwr(..)
  return process(data1,data2)
}

Переменные глобального состояния пробовал хранить с помощью контекста.
Контекст вообще не очень люблю многословно и не производительно. На больших проектах такого не встречал.
Но если стор действительно не сильно нужен, то react-swr мой выбор. Впрочем rtk ему не мешает - его как глобальное.

Как на основе данных из этих эндпойнтов создать селекторы?

Примерно так:
...
export const selectUsers = api.endpoints.getUsers.select();
...
const users = useSelector(state => selectUsers(state).data)

Sign up to leave a comment.