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

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

const addNode = (data) => {
    dispatch(createNode(data));
    ...
    return createdNodeId;
}

Моя проблема заключается в том, как получить идентификатор объекта.объект, который был создан в результате отправленного действия?

Диспетчер возвращает полное состояние, а не только новый объект.Я вижу пару вариантов, но я не уверен, какой из них будет лучше ...

Вариант 1: Сгенерировать и передать идентификатор

Сгенерировать идентификатор самостоятельно в addNode и передать его в createNode(...) с остальными данными.

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

Вариант 2: Извлечение идентификатора из состояния результата

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

Вариант 3: Передать ID обратно в действие

Действия должны быть неизменными.Но что на самом деле произошло бы, если бы я обозначил в своем действии свойство «result», которое редуктор напишет для передачи желаемой информации?В моем понимании это должно работать нормально, если свойство «результата» никогда не обрабатывается редуктором как часть входной полезной нагрузки действия.

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

Редактировать: A аналогичный вопрос задавался ранее, но ответом было изменение редуктора, чтобы избежатьнужен результат.К сожалению, это не вариант здесь.

1 Ответ

0 голосов
/ 06 декабря 2018

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

Разбить код, который генерирует идентификатор из редуктора в его собственное пространство.Используйте этот код, чтобы включить идентификатор в отправленное действие, чтобы создать новый объект, либо из любого кода, отправляющего действие, либо из самого создателя действия.Верните идентификатор из вашей функции.

const addNode = (data) => {
  const action = createNode(data);
  dispatch(action);
  ...
  return action.payload.id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...