使用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),
];
哪一个更好?为什么?
没有功能差异,因为MateuszBurzyński(redux-saga维护者)解释了here:
在引擎盖下它们都是相同的,
yield [...effects]
将导致弃用警告,并通知你关于all
。引入它是为了使并行行为显式化,并且很好地反映了Promise.all
它最好使用all()
,因为它告诉读者我们在这里产生的效果超过1,但是如果没有它,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));