2017-02-17 25 views
3

私は同じ質問を見つけました。hereですが、適切な答えが見つからない場合は、私が探しています。redux-sagaの約束

私はCRUD操作で簡単なアプリケーションを開発しています。

dispatch({ type: FETCH_POST, id: 'post-id' }) 

私は約束を返すために、上記の呼び出しをReduxの-佐賀を使用したいのです:成分(componentDidMount())を搭載します後編集ページで、アプリは、特定のポストの詳細情報を取得するためのアクションをディスパッチします私はAPIレスポンスにアクセスできます。

今、コールバック/プロミスなしでは、私はストア内で新しい状態を定義することになりました(post_editedなど)、それを編集ページのコンポーネントのpropsに接続/マップします。

このような状況に対処するにはどうすればよい方法がありますか?

答えて

6

問題に関する詳細情報をお知らせください。状態変数を維持するために既に存在し

API.js

function apiCallToFetchPost(id) { 
    return Promise.resolve({name: 'Test}); 
} 

postSaga.js

function* fetchPostSaga({id}) { 
    try { 
    const request = yield call(apiCallToFetchPost, id); 
    // -> in post reducer we will save the fetched data for showing them later 
    yield put({type: FETCH_POST_SUCCESS, payload: request}); 
    } catch (error) { 
    yield put({type: FETCH_POST_SUCCESS_FAILURE, error}) 
    } 
} 

export function* onBootstrap() { 
    yield takeLatest(FETCH_POST, fetchPostSaga); 
} 
+0

:私は、私が正しく問題を理解するかどうかわからないんだけど、一般的です'posts'のリスト。次に、2つの状態を持つ必要があります.1つはリスト 'posts'のためのもので、もう1つは' post'を編集/表示するための単一リソースです。共通/ベストプラクティスですか?実際、私は単一の 'post'のために別の状態を追加したくありませんでした。 –

+0

このコードは状態で何もしていませんが、アクションをディスパッチするだけです。あなたのレデューサーコードは、フェッチされたデータをどうするかを決定します。ここにレデューサーコードはありません。投稿のリスト全体を取得する他のコードが既にある場合は、これは必要ありません。レデューサー( 'getPostById(state、id)'のような)でセレクター関数を作成し、 'mapStateToProps()'で呼び出すことができます。 – stone