2017-04-20 19 views
0

AsyncStorage & redux-persistと一緒に私の反応するネイティブアプリでredux-thunkを使用しています。当然のことながら、アクションをディスパッチした後に状態が変化するのには遅れがあります。私の場合asyncstorage + redux thunk + reduxディスパッチ時のコールバック

console.log(this.props.counter); // 1 
this.props.dispatch(incrementCounter()); 
console.log(this.props.counter); // still 1 ? 

import { compose, createStore, applyMiddleware } from 'redux'; 
import { persistStore, autoRehydrate } from 'redux-persist'; 
import thunk from 'redux-thunk'; 
import reducers from '../reducers'; 
import { AsyncStorage } from 'react-native'; 
import createLogger from 'redux-logger'; 

const logger = createLogger({ 
    predicate:() => process.env.NODE_ENV === 'development' 
}); 

const middleWare = [ thunk, logger ]; 

const createStoreWithMiddleware = applyMiddleware(...middleWare)(createStore); 

export function makeStore(onComplete :?() => void) { 
    const store = autoRehydrate()(createStoreWithMiddleware)(reducers); 
    persistStore(store, { 
    storage: AsyncStorage 
    }, onComplete); 
    return store; 
} 

export default makeStore; 

ので、私は何をする必要があるか

this.props.dispatch(incrementCounter()) 
    .then(() => console.log(this.props.counter)); // 2 

がどのように私はこれを達成することができますようにディスパッチ関数にコールバックのようなPromiseを追加するのですか?私はsetTimeoutを使用したが、私はその信頼できるオプションとは思わない。

答えて

0

フラックスの基本を理解する必要があります。

アクション=>派遣=>ストアのアップデート=>購読済みのモジュールがあなたのケースではタイムアウトが動作することはできません

を通知され、あなたは店の更新に通知を受けるために店を購読する必要があります。

http://redux.js.org/docs/api/Store.html#subscribe