У меня есть функция, которая вызывается из внешнего кода.Его эффект должен заключаться в том, чтобы создать объект в моем хранилище редуксов на основе переданных данных и вернуть идентификатор объекта в качестве дескриптора для будущих обновлений:
const addNode = (data) => {
dispatch(createNode(data));
...
return createdNodeId;
}
Моя проблема заключается в том, как получить идентификатор объекта.объект, который был создан в результате отправленного действия?
Диспетчер возвращает полное состояние, а не только новый объект.Я вижу пару вариантов, но я не уверен, какой из них будет лучше ...
Вариант 1: Сгенерировать и передать идентификатор
Сгенерировать идентификатор самостоятельно в addNode и передать его в createNode(...) с остальными данными.
Это, вероятно, самый простой с практической точки зрения, но я считаю это ужасным с концептуальной точки зрения.Раньше внутренняя стратегия генерации идентификаторов внезапно раскрывалась в моей функции, и, более того, в зависимости от стратегии идентификатора мне, возможно, придется столкнуться со всеми видами конфликтов идентификаторов и / или синхронизацией, чтобы избежать их.
Вариант 2: Извлечение идентификатора из состояния результата
Полагаю, можно было бы экстраполировать новый узел из состояния результата.Но это может быть очень сложно очень быстро, не говоря уже о медленном ...
Вариант 3: Передать ID обратно в действие
Действия должны быть неизменными.Но что на самом деле произошло бы, если бы я обозначил в своем действии свойство «result», которое редуктор напишет для передачи желаемой информации?В моем понимании это должно работать нормально, если свойство «результата» никогда не обрабатывается редуктором как часть входной полезной нагрузки действия.
Это все еще немного хитро, поскольку действие теперь частично изменяемо,Но, учитывая другие варианты, сейчас это мой любимый.
Редактировать: A аналогичный вопрос задавался ранее, но ответом было изменение редуктора, чтобы избежатьнужен результат.К сожалению, это не вариант здесь.