2016-07-27 5 views
6

私はredux-sagaを使用しています。コードyield* ReduxSaga.takeEvery('MY_ACTION', updatePorts);actionにアクセスしてフィールドを取得するにはどうすればいいですか?例えばサガからaction.paramsを取得する方法

私はアクションの作成者を持っている:私は私のサガからaction.statusにアクセスするにはどうすればよい

function status(){ 
    type: 'MY_ACTION', 
    status: true 
} 

?または、getState()selectでのみデータにアクセスする必要がありますか?

答えて

17
const actionCreator=()=>({ 
    type: 'MY_ACTION', 
    status:true 
}) 

function* updatePorts(action) { 
    console.log(action.status) 
} 

function* watchUpdatePorts() { 
    yield* takeEvery('MY_ACTION', updatePorts) 
} 

https://github.com/redux-saga/redux-saga/tree/master/docs/api#takeeverypattern-saga-args

+2

あなたが素晴らしいです。それは働いている。ドキュメントへのリンクを投稿してください。私はそれを見つけることができた。 – zatziky

+0

私のために働く。恐ろしい男! – digit

2
const actionCreator =() => ({ 
    type: 'MY_ACTION', 
    status: true 
}) 

function* updatePorts() { 
    while (true) { 
     const { status } = take('MY_ACTION'); 
     // ... 
    } 

} 

また、このような何かを行うことができます。 redux-sagaドキュメントには、利点についての素敵な説明があります。

takeの使用は、コードの記述方法に微妙な影響を与えます。 takeEveryの場合、呼び出されるタスクはいつ呼び出されるかを制御しません。それらは、それぞれの一致するアクションで何度も呼び出されます。彼らはまた、いつ観測を止めるべきかについては何も制御していない。

テイクの場合、制御が逆転します。アクション がハンドラタスクにプッシュされる代わりに、佐賀はアクションを 自身で引き出しています。アクションが を送出したときに解決される通常の関数呼び出し action = getNextAction()を実行しているかのように見えます。

はもっとここで読む: https://redux-saga.js.org/docs/advanced/FutureActions.html

関連する問題