2017-03-28 19 views
0

私は、州の1つの変数の変更を待ち受けるredux sagaを作成しようとしています。それが変わると、私はいくつかの他の行動を送りたい。これは可能ですか?redux sagaの店舗変更を聞く

これは私が何をしたいです:

yield takeLatest(fooAction, fetchAll); 

function* fetchAll() { 
    const part = yield select(getPartOfState); 
    if (part.flag) { 
     yield call(listenToChange); 
    } 
} 

function* listenToChange() { 
    const anotherPart = yield select(getAnotherPartOfState); 
    if (anotherPart === true) { // this is what I want to wait for 
     // do something 
    } 
} 

最初はそれが偽になり、一度だけループでこれを実行するので、だから私は基本的に、変更するanotherPartを待ちたい(でもlistenToChange場合複数回実行されます。これは可能でしょうか?

+1

は理論的にこれを行うためのさまざまな方法がありますが、私は聞いてないと思う。これにより

は心、与えられた値を持っている状態の作品を待っているサガは、次のように書くことができていますサガの変化した状態への変化は、いかなる意味においても慣用的である。あなたは減速機の 'anotherPartOfState'の変更を引き起こす責任があるアクションを持っていませんか?それでは、この特定の動作だけを 'takeLatest'することができます。 – Alex

答えて

0

アレックスは、状態のこの部分の変更をトリガーする可能性がある行為を聴きにダウン状態変更になる聞いて、彼のコメントで述べたように。

takeエフェクトは、アクションを記述するためのさまざまなパターンをパラメーターとして使用できます。これは、アクション、アクションの配列、関数など、それを行うのに役立ちます。このようなアクションをホワイトリストに入れたくない場合は、 takeを引数なしで(または明示的にしたい場合は文字列'*')呼び出すと、アクションごとに状態を検査する機会が与えられます。

function *waitForStateToHaveValue(selector, expectedValue) { 
    let stateSlice = yield select(selector); 
    while (stateSlice !== expectedValue) { 
    yield take(); 
    stateSlice = yield select(selector); 
    } 
} 
関連する問題