Получить часть избыточного состояния в вызовах сервера - PullRequest
0 голосов
/ 05 марта 2019

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

Одним из возможных способов получения копии состояния является использование getState () в действиях перед выполнением серверных вызовов.Но при таком подходе я буду показывать глобальное состояние, которое является анти-паттерном.

Есть ли лучший способ обойти это?

Чтобы привести пример, мой код выглядит следующим образом.

App.js

executeAction(selectedData)

actions.js

function executeAction(selectedData) {
    // execute Worker threads
    // Takes around 20 seconds
    onWorkerThreadResolution(selectedData)
}

function onWorkerThreadResolution(selectedData) {
    // Make server call with selectedData as an argument
}

Существует высокая вероятность того, что кто-то может иметьобновил selectedData в избыточном состоянии с помощью другого действия пользовательского интерфейса.

1 Ответ

0 голосов
/ 07 марта 2019

Согласно действию Redux это простой объект JavaScript.Поэтому я думаю, что вы имеете в виду создателя действий, который в вашем случае будет создателем асинхронных действий .

Общая логика - использовать Redux-thunk для выполнения вызовов сервера.При выполнении вызова сервера вы передаете ему только обязательные аргументы, а не полное состояние.Когда вызов завершен успешно или по ошибке, вы вызываете диспетчер от вашего создателя действия с новыми данными.Лучший способ сделать это - вернуть Promise из функции вызова вашего сервера создателю действия.(Вызовы сервера могут быть не реализованы с помощью fetch, как в примере. Это зависит от вас, как их реализовать.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...