2017-11-21 9 views
0

私はredux-sagaでプロジェクトに取り組んでいます。私は前にサンクを使用していた ので、私はReduxの-サンクリターンのアクションが約束redux sagaで非同期関数の後にいくつかの作業を行います

componentDidMount(){ 
    login().then((success)=>{ 
    redirectToProfilePage(); 
    }) 
} 

ので、API要求などの後にいくつかの作品を行うことができます。 しかし、私がredux-sagaでこれをやろうとしているときは、を入力してを使用することはできません。なぜなら、sagaは約束を返さないからです。

私はこれを解決するためにcomponentWillReceivePropsを使用していますが、私はそれが適切な解決策ではないと思います。

サガ発電機でこの作業を行う必要がありますか?それとももっと良い方法がありますか?

+0

コンポーネント内にジェネレータ関数を作成し、アクションディスパッチを介してその関数を呼び出します。 –

答えて

2

Sagasの可能性を最大限に活用するには、componentDidMountにアクションをディスパッチする必要があります。そのコンポーネントのごsagas.jsファイルで

、componentDidMountでアクションをリッスンするためにファンクション・ジェネレータを作成しますが:

function* listenForLoginAction(){ 
    yield takeLatest('LOGIN_ACTION', loginSaga) 
} 

次に、あなたのloginSagaは、あなたがそれを伝えるために、非同期のものを処理します。あなたのloginSagaはこのような何かになります:yield callyield putを使用して

function* loginSaga(action){ 
    try{ 
     const loginResponse = yield call(loginFunc, varsForloginFunc) 
     yield put({type: 'LOGIN_SUCCESS', loginResponse}) 
    } catch (error) { 
     yield put({type: 'LOGIN_FAIL', message: error.message}) 
    } 
} 

を、takeLatestまたはtakeEveryを使用して特定のアクションのためのリスニングと接続詞で、あなたはそれ以上の行が完了するまで実行するために待機するコードを記述することができます。

希望に役立ちます!

+0

ありがとうございました。しかし、私はこれが私が求めているものではないと思う。非同期の処理が完了した後で、アクションを送出するコンポーネントでいくつかの作業を行いたいと思います。 – godsenal

+0

コンポーネントではどのような作業をしていますか? –

+0

@AnandS遅く返事を申し訳ありません。私は非同期作業finish.Orの後にいくつかの要素をスクロールしてsetStateしようとしています。 – godsenal

関連する問題