Могу ли я отправить вызов AJAX в React и Redux без создателей действий и редукторов?

У меня есть несколько запросов ajax, которые напрямую не управляют состоянием моих приложений. В приложении "реакция/редукция" необходимо (или есть какое-либо преимущество) отправлять действие для этих ajax-запросов вместо того, чтобы просто отправлять запрос ajax непосредственно в компонент?

Чтобы упростить мой сценарий, у меня по существу есть список объектов в моем состоянии redux. Я использую форму для публикации нового объекта в базе данных, после успешной публикации я перенаправляюсь на страницу списка, где отправляется запрос GET, и список извлекается и состояние обновляется.

AJAX-вызов для публикации нового объекта напрямую не управляет моим состоянием.

Команда, с которой я работаю, проходит полные шаги async с сокращением на 3 шага ex: 'FETCH_REQUESTED', 'FETCH_SUCCESS', 'FETCH_FAIL' вместе с соответствующими редукторами для всех запросов AJAX, и это большая проблема, чтобы добавить больше, и редукторы, похоже, не имеют смысла.

Ответы

Ответ 1

Вы можете абсолютно отправлять вызовы AJAX непосредственно из компонентов!

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

Сохранение вызовов AJAX в создателях действия удобно, когда разные компоненты выполняют одни и те же запросы API, а затем изменяют состояние аналогичным образом. Это также удобно, если вы хотите избежать обхода запроса, когда уже есть некоторые данные в кэше, и вы хотите сохранить такие проверки в одном месте, а не разбросаны по компонентам.

Тем не менее Redux занимается только тем, как обновляется глобальное состояние, и если вам просто нужно сделать запрос AJAX от какого-либо компонента, вам не нужно писать создатель действия или редуктор для него, если вы не найдете его удобным.

Вообще говоря, Redux (и Flux) - это то, что вы могли бы подумать о реорганизации своего кода, когда у вас много сложных компонентов; не то, с чем вам следует начинать каждый компонент. Вы можете использовать только те части, которые вам нужны (например, только синхронные вещи), или даже вообще избегать их в некоторых случаях (например, складная панель не должна сохранять свое состояние в магазине). Используйте его только тогда, когда вы понимаете конкретные преимущества, которые он дает вам в конкретной ситуации, никогда "на всякий случай" или потому, что он популярен.

См. также мой ответ на "Как отправить действие Redux с таймаутом?"

Чтобы обратиться к вашему конкретному примеру, вы можете использовать Redux для этого, если используете преимущества Redux: возможно, вы отправите действие, чтобы оптимизировать форму и отобразить новый список сразу, и объединить его с извлеченным когда он доступен, чтобы взаимодействие стало мгновенным. Это прецедент для создателей асинхронных действий. Если вы не смотрите на такую ​​сложность UX, я не уверен, что Redux необходим вообще.

Ответ 2

Попробуйте использовать ссылку ниже

https://github.com/sskyy/redux-task

Он может помочь вам управлять состоянием запроса AJAX без этих подробных действий и редукторов.