2017-07-31 10 views
1

これが今の私のサガです:パス引数 - とハンドラに引数を取得

function* upAsyncSaga() { 
    yield takeEvery(UP_ASYNC, upAsyncHandler); 
} 

そしてここでは、関連する同期の材料である:

const UP_ASYNC = 'UP_ASYNC'; 
export function upAsync() { 
    return { 
     type: UP_ASYNC 
    } 
} 
function* upAsyncHandler() { 
    yield call(wait, 1000); 
    yield put(up()); 
} 

const UP = 'UP'; 
export function up() { 
    return { 
     type: UP 
    } 
} 

私はでupAsyncSagaをトリガーこれを行うことstore.dispatch(upAsync())。しかし、私はtimesという引数を渡したいと思います。

export function upAsync(times) { // this is the argument "times" 
    return { 
     type: UP_ASYNC 
     times // here it is again 
    } 
} 
function* upAsyncHandler(times) { // i want the argument to get to the handler 
    for (let i=0; i<times; i++) { 
     yield call(wait, 1000); 
     yield put(up()); 
    } 
} 

は、これは可能です:だから私は私が/この擬似コードのようなハンドラに引数を取得したい願っていstore.dispatch(upAsync(3))をしたいし、その後?私たちは保存するために任意のアクションをディスパッチするとき、私たちはこのような引数(ペイロード)を含めることができ

答えて

1

store.dispatch({ type: UP_ASYNC, payload : { times: 2 }}) 

あなたの機能変更:

export function upAsync(type, payload) { 
    const { type, times } = payload 
    return { 
     type: type, 
     times: times 
    } 
} 

私はあなたの完全なストアの実装がどのようにわからない午前をしかし、もしあなたがredux-sagaに従っているならば、上記はあなたの問題を解決するはずです。

編集:

あなたが効果を(私は信じている)があるReduxの店舗を持っている場合、あなたは、単にこのようなアクションを実行することができます:ここで

dispatch({type: '<namespace>/upAsyncHandler', payload: {type: UP_ASYNC, times: 2}}) 

を、「名前空間」はReduxの中に自分の名前空間を意味し、ハンドラがエフェクトとして定義されている場所を格納します。以下を参照してください:

*upAsynHandler(action, { call }) { 
    const { type, times } = action 
    const res = yield call(wait, times) 
} 
+0

Umeshありがとうございますが、どうすれば 'payload'を' upAsyncHandler'にすることができますか? – Blagoh

+0

大変ありがとうございました。あなたの解決策を受け入れるのが遅れていても構いません。 – Blagoh

関連する問題