Pull to refresh

Comments 1

Ух. Очень много сложных обвязок. Но выглядит логично.


Предлагаю следующий шаг: выпилить к чёрту redux. Или хотя бы перестать хранить в нём статусы запросов и все ответы сервера. Воспользоваться для этого хуками и держать это в локальном state-е. Заодно добавить валидацию. Выглядеть это условно может примерно так:


// api file

export const apiFetchList = (limit: number, page: number) => serverQuery
  .get(`entityList`, { limit, page })
  .io(array(IO_EntityItem)); // IO-TS validation + typing
// ^ (limit: ...) => Promise<Entity[]>

// some component's custom hook file
const { fetch, isFetching, result: entities } = useAsyncQuery(apiFetchList);
const [page, setPage] = useState(0);

useEffect(() => {
    fetch(); // вопросы с race решаются внутри `useAsyncQuery`
    // также как и вопросы с error handling
    // туда же можно добавить и skeletons, и всякие debounce, throttle и пр.
}, [page]);

Если же в redux всё же что-то хранить нужно (многие хранят там общие server сущности), то это можно сделать или в рамках очередного кастомного хука общего назначения (поверх useAsyncQuery), который хорошо заточен под ваш store.

Sign up to leave a comment.