2017-06-05 36 views
0

假設我有一個update comment操作。當用戶在從Promise獲得成功結果後更新評論時,我應該關閉評論編輯器。這是我的示例代碼從我的項目:回調中的還原操作的良好模式

export const updateComment = (comment,callBack/* ? */) => { 
    return (dispatch, getState){ 
     api.updateComment({...comment}).then((result) => { 
      /* Do something */ 
      callback() /* ? */ 
     }) 
    } 
} 

react component我用類似下面的代碼操作:

handleUpdateComment(){ 
    dispatch(actions.updateComment(this.state.comment,this.closeCommentEitor) 
} 

它運作良好,但我認爲是不是一個好模式,關閉評論編輯。我正在尋找一個正確的模式來關閉編輯器,而不像我所做的那樣通過callBack

回答

1

當您使用redux-thunk時,您可以使用dispatch來自另一個操作的操作。 你可以做的是什麼,commentEditor有你在終極版存儲,並基於該狀態打開或關閉commentEditor

export const updateComment = (comment, comment_id) => { 
    return (dispatch, getState){ 
     api.updateComment({...comment}).then((result) => { 
      /* Do something */ 
      dispatch({type: 'CLOSE_COMMENT_EDITOR', id: comment_id}) 
     }) 
    } 
} 

在此之後的減速機上這個動作變化終極版存儲的狀態的狀態,東西像

import update from 'immutability-helper' 


var initialState = [{commentId: '1', commentEditorOpenStatus: false}, {commentId: '2', commentEditorOpenStatus: false}] 
const reducer = (state = initialState, action) => { 
    switch(action.type) { 
     'CLOSE_COMMENT_EDITOR': 
        const idx = state.findIndex(obj => obj.commentId == action.id); 
        return update(state, { 
         [idx]: { 
           commentEditorOpenStatus: { 
            $set: false 
           } 
          } 
        }) 
      // Other action handlers here 
      default: return state 
    } 

} 
+0

是的,我打算這樣做,但問題是,也許有很多評論打開,所以我應該說註釋編輯器與評論編號應該被關閉。我對此毫不知情。 –

+0

在這種情況下,將API與comment和comment_id一起傳遞,您可以將有效負載分配爲comment_id,然後根據id切換reducer中的狀態 –

+0

我可以有一個引用來完全弄清楚嗎? –

1

更新您的應用程序的狀態唯一的事情是你的減速器。

reducer應負責更新應用程序的狀態,而不是您的操作(您現在正在傳遞getState)。

,我建議你看看redux-promise-middleware

中間件使樂觀的更新和調度之前,履行,拒絕操作,可以通過減速攔截。