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.
+1
Sign up to leave a comment.
Решаем проблемы REST с помощью Redux Toolkit Query