Зависимость данных Flux / Alt, как обрабатывать элегантно и идиоматически
я используюальт как моя реализация потока для проекта, и у меня возникли проблемы с нахождением наилучшего способа обработки хранилищ для двух связанных объектов. я используюисточники вместе с registerAsync для обработки моих вызовов async / api и привязки их к моим представлениям с помощью AltContainer.
У меня есть две сущности, связанные один к одному посредством разговорного идентификатора. Оба загружаются через вызов API:
Как только мое хранилище вакансий загружено данными, я хочу заполнить хранилище бесед.
Я использую источник для загрузки магазина вакансий:
module.exports = {
fetchJobs() {
return {
remote() {
return axios.get('api/platform/jobs');
},....
Похоже, работа дляждать() метод, но он подходит для использования, когда содержимое одного хранилища требует преобразования или слияния с содержимым другого. Мне нужно получить содержимое одного хранилища данных на основе содержимого другого.
В общих чертах мне нужно:
Вызовите сторонний API и загрузите список объектов в магазин.Когда эти данные поступают, мне нужно использовать атрибут каждого из вышеперечисленных для вызова другого API и загрузки этих данных в другое хранилище.Мое наивное решение состоит в том, чтобы ссылаться на действия беседы из хранилища заданий и отправлять событие, когда поступают данные. Что-то вроде этого:
var jobActions = require('../actions/Jobs');
var conversationActions = require('../actions/Conversations');
class JobStore {
constructor() {
this.bindListeners({
handlefullUpdate: actions.success
});...
}
handlefullUpdate(jobs) {
this.jobs = jobs;
conversationActions.fetch.defer(jobs);
}
}
Конечно, это нарушает изречение о том, что хранилища не должны отправлять события, и поэтому я должен использовать defer для отправки действия в середине отправки. Это имеет смысл для меня, так как, похоже, идя по этому пути, я вновь вводю всевозможные побочные эффекты в своем коде; теряя красоту "функциональных конвейеров", которые я должен видеть с потоком.
Кроме того, мое хранилище вакансий должно содержать ссылку на любые зависимые объекты, чтобы оно могло отправлять соответствующее действие. Здесь у меня есть только один, но я мог представить себе много. С точки зрения зависимостей между сущностями это кажется полностью задом наперед.
На ум приходит пара альтернатив:
Я могу позвонитьAPI / платформа / работа конечная точка в источнике / действии, где я получаю все разговоры, просто чтобы получить идентификатор. Оригинальный подход более эффективен, но это кажется более правдоподобным в духе изменения, поскольку я теряю все перекрестные помехи.
Я также мог бы иметь одно действие / источник, который выбирает оба, возвращая{jobs:{}, conversations: in the action}
(организовать там зависимость с помощью обещаний) и использовать это заполнить оба хранилища. Но этот подход кажется мне излишне сложным (я чувствую, что не должен был этого делать!).
Но я пропускаю другой путь? Кажется странным, что такой общий случай использования нарушил бы элегантность потока и / или заставил бы меня перепрыгнуть через множество обручей.
@dougajmcdonald задал похожий вопросВот, но, возможно, это было сформулировано слишком широко, и не получило никакой тяги: