Używam alt jako mojej implementacji strumienia dla projektu i mam problem z zawijaniem głowy wokół najlepszego sposobu obsługi magazynów ładujących dla dwóch powiązanych obiektów. Używam funkcji sources wraz z registerAsync do obsługi moich połączeń async/api i wiązania ich z moimi widokami za pomocą AltContainer.Zależność danych Flux/Alt, jak obsługiwać elegancko i idiomatycznie
Mam dwie jednostki powiązane jeden do jednego przez identyfikator conversationl. Oba są ładowane za pomocą wywołania API:
Raz mój sklep praca jest ładowany z danych Chcę wypełnić sklep rozmowy.
używam źródło załadować sklep praca:
module.exports = {
fetchJobs() {
return {
remote() {
return axios.get('api/platform/jobs');
},....
Wygląda na to zadanie dla waitfor() metody, ale wydaje się do użycia, gdy zawartość jednego sklepu wymagają przekształcenia lub połączenia z zawartością innej. Potrzebuję pobrać zawartość jednego magazynu danych na podstawie zawartości innej.
Ogólnie muszę:
- Zaproszenie strona trzecia API i załadować listę podmiotów do sklepu.
- Kiedy te dane się pojawiają, muszę użyć atrybutu z każdego z powyższych, aby wywołać inny interfejs API i załadować te dane do innego sklepu.
Moje naiwne rozwiązanie polega na przywoływaniu akcji konwersacji ze sklepu i wysyłaniu zdarzeń w momencie nadejścia danych. Coś takiego:
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);
}
}
Oczywiście, ten sposób narusza dictum, że sklepy nie powinny wywołują zdarzenia, a więc muszę używać odraczać wysyłką akcję w środku wysyłki. To ma dla mnie sens, ponieważ wydaje się, że idąc tą ścieżką, przywracam różnego rodzaju efekty uboczne w moim kodzie; tracąc piękno "funkcjonalnych rurociągów", które powinienem widzieć z płynnością.
Ponadto, mój sklep musi zawierać odniesienia do wszelkich podmiotów zależnych, aby mógł wysłać odpowiednią akcję. Tutaj mam tylko jedną, ale mogę sobie wyobrazić wiele. Pod względem zależności między podmiotami wydaje się to całkowicie wstecz.
Kilka alternatywnych przychodzą na myśl:
mogę nazwać API/platform/Praca końcowy w źródle/działania gdzie mogę pobrać wszystkie rozmowy, tak aby uzyskać identyfikator. Oryginalne podejście jest bardziej efektywne, ale wydaje się, że jest to bardziej prawdziwe, ponieważ tracę całą rozmowę.
Mogę też mieć jedną akcję/źródło, które pobiera oba, zwracając {jobs:{}, conversations: in the action}
(organizując zależność tam przy użyciu obietnic) i wykorzystuję to zapełnianie obu sklepów. Ale to podejście wydaje mi się niepotrzebnie skomplikowane (wydaje mi się, że nie powinienem tego robić!).
Ale czy brakuje mi innej drogi? Wydaje się dziwne, że taki powszechny przypadek użycia przełamie elegancję paradimu strumienia i/lub zmusi mnie do przeskoczenia przez tak wiele obręczy.
@dougajmcdonald postawione podobne pytanie here, ale może to było sformułowane zbyt ogólnie, a nie dostał żadnej przyczepności:
Sprawdzę twój kod, kiedy moja głowa będzie wyraźniejsza. Dzięki. –
Zrobiłem ci prezent. Brak sensu w punktach odchodzących. –