2017-02-22 46 views
2

Так что, возможно, я задаю неправильный вопрос, поэтому, пожалуйста, оставьте комментарии, и я подправлю. Мне сказали another developer, что при использовании redux я должен делать ВСЕ вызовы API в пределах actions и создавать для них reducers. Но я чувствую, что иногда выполнение вызова непосредственно в компоненте спасет меня TON кода. Есть ли лучшие практики для такого рода вещей?При использовании redux, почему я должен избегать вызовов API непосредственно в компоненте?

+0

Предполагается использовать Redux как централизованное управление состоянием. Вы могли бы иметь список задач и подробный вид как компоненты с независимыми состояниями и могли бы ввести состояние, в котором «задача x завершена» в подробном представлении и «задача x в процессе» в списке. Некоторые тривиальные действия, такие как выборка данных для автозаполнения, могут происходить за пределами хранилища состояний. – aitchnyu

+1

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

ответ

3

Если данные, которые вы получаете от API, будут потребляться только одним компонентом, тогда вы можете написать его как часть своего компонента (или, еще лучше, компонент контейнера). Я считаю, что обоснование того, что вы делаете ваши призывы API в действиях, заключается в том, чтобы поддерживать единственный источник правды (основная причина для использования «реакции/сокращения» для меня лично). Если вы вводите данные из вашего API, которые должны потребляться несколькими компонентами, тогда используйте сокращение, чтобы гарантировать, что одно и то же состояние поддерживается сокращением и передается всем компонентам, которые его используют.

2

Об этом ранее ответил создатель Редукса, Дэн Абрамов, здесь: Why do we need middleware for async flow in Redux?.

Резюме:

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