2017-03-14 23 views
1

setCurrentPageは、オブジェクトをグローバルストアのページオブジェクトに格納するだけです。だから私はそれを設定した後に右にアクセスしようとすると..遅延があり、オブジェクトが空であるように思える。しかし、私はconsole.log後にボタン内の同じオブジェクトをクリックして..それは人口が設定されています。Redux状態はすぐに更新されませんか?

私は知っていないreduxのラグがありますか?これを機能させるために私は何ができますか?それは...任意の助け

// initialState.js // my global redux store 
playlist: { 
    currentPage: {} 
} 

// someComponent 
let tempPage = new Page(); 
tempPage.controlNode = someAPItoGetControlNode(); //synchronous 
this.props.actions.setCurrentPage(tempPage); //tempPage.controlNode contains object correctly 
console.log(this.props.currentPage); //empty object. WHY??? 

// in some function in the same component i call in a button 
function seeCurrentPage() { 
    console.log(this.props.currentPage); //works! 
} 

// reducer 
case types.SET_CURRENT_PAGE: { 
    action.pageObj.selected = true; 
    return Object.assign({}, state, {currentPage: action.pageObj}); 
} 

// action 
export function setCurrentPage(pageObj) { 
    return { type: types.SET_CURRENT_PAGE, pageObj: pageObj }; 
} 
+1

Reduxのストアの更新同期のようなcomponentWillReceiveProps機能でログは、何ができているを取得しますが、あなたのコンポーネントにはありません –

+0

@AlexeyTenので、私のコンポーネントの各行のコードは、その前の行を待たないでしょうか?それがあなたが意味することを確認できますか?どうすればこれを動作させることができますか? – user1189352

+0

それは待っています。しかし、ストアと小道具は直接接続されていないため、店舗の変更はすぐに小道具に伝わらない –

答えて

2

遅延情報の理由はreduxのためではなく、componentの非同期実行のためです。上記のコードで

// someComponent 
let tempPage = new Page(); 
tempPage.controlNode = someAPItoGetControlNode(); //synchronous 
this.props.actions.setCurrentPage(tempPage); //tempPage.controlNode contains object correctly 
console.log(this.props.currentPage); 

、あなたのコンポーネントがすぐにログthis.props.currentPageた後、その後のアクションを発生させます。しかし、その時点でReduxのストアが更新されていませんので、あなたは、古い結果

componentWillReceiveProps(nectProps) { 
    console.log(nextProps.currentPage) 
} 
1

ため

感謝Reduxのストアが更新された後、あなたのコンポーネントが再レンダリングする必要がありますが、私のコードをめちゃくちゃです。

console.logcomponentWillReceiveProps(nextProps)またはcomponentDidUpdate()に書き込むだけで、店舗から新しいデータにアクセスできます。

関連する問題