Наиболее подходящим подходом, на мой взгляд, было бы перемещение всего редуктора logi c (ваша doSomethingComplex
функция) на сторону сервера.
Итак, все, что вам нужно сделать, - это отправить действие и отправить необходимые аргументы в API. В случае успешного ответа вы отправите действие success , позвоните myReducer
и сохраните результат в магазине.
Однако , если вы действительно Если вы хотите сохранить эту логику c на лицевой стороне, вам придется использовать промежуточное ПО - thunks или sagas (я предпочитаю sagas).
// some pseudo code //
dispatch the action
- inside the middleware -
call doSomethingComplex() // called once and stored in some variable
dispatch action that will call the reducer and store the result
call API with the result
Но все же я бы рекомендовал первое решение, так как этот (второй) подход будет работать, но может нарушить надлежащий поток данных.
Редактировать : несколько заключительных мыслей - если вы действительно хотите сохранить эти вычисления на внешней стороне, рассмотрите следующую стратегию:
- отправьте действие
- внутри промежуточного ПО (thunks или sagas) вызов
doSomethingComplex
функция - вызов API с stuff , который
doSomethingComplex
вернул - return материал - который
doSomethingComplex
возвратил - от API как success ответ - действие вызова успешно с stuff и вызовите редуктор, который сохранит его в хранилище
Вот так можно поддерживать правильный поток данных.