1

こんにちは、React コンポーネントの 1 つに onChange コールバックがあります。このコールバックは、次のようなマップ呼び出しを通じてアクションを数回ディスパッチします。

onChange: (items, newRatio) => {
  items.map( item => {
    dispatch(itemActions.updateStart({
      ...item,
      adjusted_ratio: _.round(item.adjusted_ratio + newRatio, 1),
    }))
  })
}

そして、次のような「アイテム」の佐賀があります。

  // Updating an Item 
  function* watchUpdate() {
    while(true) {
      const { record: unsavedItem, } = yield take(itemTypes.ITEMS_UPDATE_START);
      const task = yield fork( updateItemDbCrud, unsavedItem )
    }
  }
  function* updateItemDbCrud(unsavedItem) {
    const savedItem = yield call( api.update, unsavedItem );
    const result = yield put ( itemActions.updateSuccess(savedItem) )
  }

  export default [watchUpdate]

つまり、ITEMS_UPDATE_START アクションがディスパッチされるたびに、新しい updateItemDbCrud がフォークされ、いくつかの API 作業が行われると予想していましたが、一連のディスパッチの最初の処理のみが行われることに気付きました。フォークの使い方が間違っていますか?

ありがとうございました!

4

1 に答える 1

3

これは既知の問題 ( https://github.com/yelouafi/redux-saga/issues/50 ) であり、promise の性質と Redux Sagas コアでの使用に関係しています。

バージョン 0.6 で解決されました

問題の原因について詳しく知りたい場合は、上記の github の問題と、タスク、マイクロタスク、キュー、およびスケジュールに関する Jake Archibalds の記事を読むことをお勧めします。

https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

于 2016-02-05T19:54:03.030 に答える