2017-06-08 22 views
0

私はそれを発送した後にReducer(更新された状態)のデータを使用してサーバーにAPIリクエストを行います。私は十分なデータがあればディスパッチャでそれをしたでしょうが、私はディスパッチャに必要なデータだけを送ります。Reduxレデューサーのデータを使用したAPI呼び出し?

どうすればよいですか?

/* Book list container*/ 
 
const mapStateToProps = (state) => { 
 
    return { 
 
     books: state.bookApp.books  
 
    } 
 
} 
 

 
const mapDispatchToProps = (dispatch) => { 
 
    // Calling change book title from component 
 
    return { 
 
     // Dispatch new title to the book list by it's id 
 
     onChangeBookTitle: (id, newTitle) => { 
 
     dispatch(updateBookTitle(id, newTitle)) 
 
     } 
 
    } 
 
} 
 

 
// Connect redux to bookList component 
 
export default connect(
 
    mapStateToProps, 
 
    mapDispatchToProps 
 
)(BookList); 
 

 

 
/* Book list action creator */ 
 
export const updateBookTitle = (id, newTitle) => { 
 
    return { 
 
    type: 'EDIT_BOOK_TITLE', 
 
    title: newTitle 
 
    } 
 
}; 
 

 

 
/* Book list reducer */ 
 
// Assume there's already a book to update 
 
const defaultState = { 
 
    bookList: [] 
 
} 
 

 
const bookApp = (state = defaultState, action) => { 
 
    switch(action.type) { 
 
    case 'EDIT_BOOK_TITLE' : { 
 
     let newBookList; 
 
     // Create new copy of booklist 
 
     // Do some transformation 
 
     // And voilaa... i got new book list 
 
     return {...state, bookList: newBookList} 
 
     
 
     // This is the place where I want to do my API call, using the new BookList data 
 
    } 
 
    default: 
 
     return state; 
 
}

+0

これを達成したいコードの部分とこれまでに試したことを私たちに教えてください。 – G4bri3l

+0

@ G4bri3l、いくつかのコードを追加しました。ご覧ください。私はたくさんのことを試みましたが、それはどこにもありませんでした。もしあなたがこれに対する解決策を持っているなら、私を助けてください。ありがとう。 –

答えて

1

これは、サンクアクションの作成者のために良いユースケースである:

export const updateBookTitle = (id, newTitle) => { 
    return (dispatch, getState) => { 
     dispatch({type : 'EDIT_BOOK_TITLE', title : newTitle}); 

     const updatedState = getState();   
     // read values from updated state and make an API call here  
    } 
} 

ただし、が減速から任意のAPI呼び出しを行うべきではないことに注意してください!これは、Reduxの使用方法には絶対に当てはまります。

+0

wait、getStateはどこから来たのですか?それはサンクからですか?また、 'updatedState'は常に最新の更新状態を取得しています、ということは、' dispatch'が最初に完了するのを待つ必要はないということです。 –

+0

これは受け入れられた回答です。ヘルプマンのおかげです。 –

+0

ミドルウェアがアクションをインターセプトして遅延させない限り、プレーンアクションのディスパッチは100%同期です。この例では、 'dispatch()'が完了するとすぐに状態が更新されたと仮定できます。また、 'dispatch()'に関数を渡すと、 'redux-thunk'ミドルウェアがあなたの関数を呼び出し、引数として' dispatch'と 'getState'を渡します。詳細については、https://daveceddia.com/what-is-a-thunk/を参照してください。https://github.com/markerikson/react-redux-links/blob/master/に掲載されている記事もご覧ください。 redux-side-effects.md。 – markerikson

関連する問題