2015-01-18 21 views
7

Jaki jest właściwy sposób inicjowania danych (asynchronicznie) za pomocą RefluxJS? Czy istnieje coś podobnego do rozwiązania AngularJS lub implementacja Flux nie ma z tym nic wspólnego (router powinien obsługiwać tę odpowiedzialność)?Właściwy sposób inicjowania danych

Odpowiedz

10

W składniku najwyższego poziomu aplikacji użyj metody comoponentWillMount (docs), aby wywołać akcję, która pobiera dane. Ta metoda zostanie wywołana, gdy komponent zostanie początkowo wyrenderowany.

Na przykład:

// Create an async action, that will request data using a promise 
// Using the recently released (v0.2.2) helpers for async actions 
var actions = Reflux.createActions({ 
    init: {asyncResult: true} 
}); 
actions.init.listenAndPromise(promiseToGetData); 

// Update the store when the init action's promise is completed 
var store = Reflux.createStore({ 
    listenables: actions, 
    onInitCompleted: function (data) { 
     // do stuff 
     this.trigger(data) 
    } 
}); 

var App = React.createClass({ 
    mixins: [Reflux.connect(store)], 
    componentWillMount: function() { 
     // When this component is loaded, fetch initial data 
     actions.init() 
    } 
}); 
+0

Tylko pytanie: Jeśli używam refluxjs z reagują-routera, co dzieje się, jeśli obietnica została odrzucona; Czy montaż został zatrzymany (technicznie rzecz biorąc, nic się nie dzieje) lub czy jest obsługiwany ręcznie? – srph

+0

Komponent nadal będzie montowany, wywołanie akcji to ogień i zapomnij. Jeśli obietnica zostanie odrzucona, sklep nadal otrzyma wynik i możesz dodać handler 'onInitFailed'. Zobacz https://github.com/spoike/refluxjs#asynchronous-actions, aby uzyskać więcej informacji o akcjach asynchronicznych. –

+0

Dzięki. A propos, czy odwołujesz się do '' 'componentWillMount''' zamiast' '' onComponentWillMount'''? – srph

-1

Refluks ma API dla tego właściwie.

Docs są ubogie w opisywaniu tego, ale Spoike (autor refluksem za) dał odpowiedź wraz z przykładu kodu:

https://stackoverflow.com/a/28984512/1775026

+0

To pytanie dotyczyło asynchronicznego pobierania danych. Reflux ustawia metodę "getInitialState" sklepu na komponentach React i nie należy jej używać do asynchronicznego pobierania danych. Przykład w odpowiedzi, z którą się łączysz, dotyczy wartości statycznych. Zobacz oficjalny React [dokumentacja] (https://facebook.github.io/react/tips/initial-ajax.html) na przykład i http://stackoverflow.com/questions/26615307 –

Powiązane problemy