- PVSM.RU - https://www.pvsm.ru -

Для чего я создал очередную библиотеку, чтобы уменьшить шаблонный код Redux.js

Данный пост — перевод данной статьи [1]

Я работал над новым проектом на React и Redux. Раньше при разработке проектов на React, я работал в одиночку, но в этот раз я был частью команды, где каждый член команды имел некоторый опыт в React и Redux. Проект должен был быть выпущен в продакшн за короткое время.

По началу, мы решили использовать redux-thunk как мидлвер для redux, потому что он очень прост и каждый из нас знал как им пользоваться. Мы разработали RESTful API с конечными точками для каждой таблицы в базе данных. После того как мы поделились с заданиями, каждый из нас приступил к разработке своих модулей. Каждая страничка и модуль приложения получает данные с разных точек нашего API. Некоторые запросы зависят от результата другого запроса, поэтому приходилось связывать запросы в цепочку и передавать необходимые параметры в другую функцию, которая в свою очередь собирает данные с другой таблицы.
Месяц спустя, у нас в проекте было куча экшнов и экшн типов для получения любых данных с нашего API. Кроме того каждый разработчик называл эти функции и константы, как было ему удобно. Другие ребята в команде перед тем как писать новый экшн, должны были рыться в куче экшнов, чтобы не наплодить дубликатов. А если кто-то уже создал экшн и ещё не комитил свой код, а в это время другому человеку потребовалась такая функция и он написал свою, то одному из них приходилось объединить 2 комитнутых экшна.

Где-то в середине нашего процесса разработки, нам поручили дополнительное задание, в котором говорилось, что приложение должно функционировать в оффлайне. Я начал изучать вопрос и очень скоро наткнулся в библиотеку которая называется redux-offline [2] и это оказалось именно тем что нам было нужно. Однако, оно требовало немного другой структуризации экшнов, поэтому нам нужно было переписать большинство наших экшнов, чтобы они сработали с этой библиотекой.

В то время мне начало надоедать структура нашего проекта и проблемы, которые возникают из-за этого. Я начал размышлять об объединение всех экшнов, которые запрашивают данные с сервера в одно место и чтобы каждый из нас мог без труда ими пользоваться.

Я пришел к идее создания библиотеки, которая потребует минимум усилий для получения данных с удаленных источников и положить всю информацию о состоянии запросов и возникших ошибок вне редьюсеров.

Вот наш список требований, составленный мною, для работы с удаленными данными:

  • CRUD для одного объекта
  • CRUD для нескольких объектов
  • Связка запросов
  • Фильтрация, сортировка, нумерация страниц и т.д
  • Возможность показа отдельных спиннеров для любого запроса
  • Оптимистичное UI

Мне удалось создать библиотеку собрав все эти возможности в одну библиотеку с названием redux-data-entity [3]. Я сделал так чтобы отправка запросов работали также как редьюсеры, внутри одной функции, чтобы можно были легко с ориентироваться и изменять. Также, так как нам нужна была поддержка оффлайна, я с интегрировал его с redux-offline и выпустил отдельную библиотеку под названием redux-data-entity-offline [4]

Автор: мастер слога

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/pesochnitsa/265914

Ссылки в тексте:

[1] данной статьи: https://medium.com/netscape/why-did-i-make-another-library-to-reduce-redux-boilerplate-code-b7479a9b7d0

[2] redux-offline: https://github.com/redux-offline-team/redux-offline

[3] redux-data-entity: https://github.com/iamawebgeek/redux-data-entity

[4] redux-data-entity-offline: https://github.com/iamawebgeek/redux-data-entity-offline

[5] Источник: http://habrahabr.ru/sandbox/111688/