web-dev-qa-db-ja.com

yield []とyield all()の違い-ES6 / redux-saga

Redux-sagaのyield all([])を_ES6_の組み込み_yield []_よりも使用する利点はありますか?

複数の操作を並行して実行するには、redux-sagaは以下を提案します。

_const result = yield all([
  call(fetchData),
  put(FETCH_DATA_STARTED),
]);
_

しかし、all()メソッドなしでも同じことができます。

_const result = yield [
  call(fetchData),
  put(FETCH_DATA_STARTED),
];
_

どちらが良いのですか?なぜですか?

9
Ali Saeed

MateuszBurzyński(redux-sagaメンテナー)が here を説明するように、機能的な違いはありません。

内部的にはどちらも同じですが、_yield [...effects]_を使用すると非推奨の警告が表示され、allについて通知されます。

これは、並列動作explicitを作成するために導入され、 Promise.all をうまくミラーリングしています

ここではall()を使用することをお勧めします。これは、ここで複数の効果を生み出していることを読者に通知していますが、yieldのさまざまな使用法は、それなしでも機能します。

複数の効果を持つオブジェクトを生成する

_const { company, profile } = yield {
  company: select(getCompany),
  profile: select(getUserProfile, userId),
};
_

配列リテラルを生成する

_yield [
  put(userRequestSucceeded(userId)),
  put(userReceived(response.data)),
];
_

mapを使用して配列を生成する

_yield userIds.map(userId => call(fetchUserDetails, userId));
_
9
Ali Saeed