我在https://react-redux.js.org/api/batch处读到,可以使用batch
“ 以确保在React之外分派的多个动作只会导致一次渲染更新”,像这样(我在React事件处理程序中使用,即) :
...
const submitData = event => {
// ... some code before
batch(() => {
dispatch(first())
dispatch(second())
})
}
...
但是我的问题是如何在batch
中正确地执行redux-saga
动作,以便在从传奇中分派多个动作时,结果是一次重新渲染而不是多个?我试图将多个put
放入all
数组中,但不确定它是否实际批处理了put
:
yield all([
put(addFirst({first: 1})),
put(addAnother({second: 2)),
]);
上面的方法是因为我在https://github.com/manaflair/redux-batch处阅读了文档,作者在其中写了“ 由于此软件包已编写,redux-saga得到了改进,并使用all([put(...),put(。 。)])似乎已将两个操作正确地批处理为一个订阅事件,从而使redux-batch在这种情况下变得多余。“,[[0]中的[[but]另一个人写道,批处理由[ C0]。 https://github.com/manaflair/redux-batch/issues/21(我使用的)仍然有一个示例,其中React unstable_batchedUpdates API
作为redux-toolkit
(redux-batch
)。
React-Redux本身中的A Comparison of Redux Batching Techniques用法仅尝试最小化单个调度中的嵌套重渲染。这与该项目的目标没有重叠,该项目试图允许一次调度多个操作,而仅一次通知商店订户。
根据您最初的问题,由于需要redux-batch
,因此我不确定您是否可以在sagas中正确使用React-Redux的unstable_batchedUpdates()
API。batch()
API(仅是React自己的yield put()
API,已重新导出)依赖于跟踪在单个事件循环滴答中排队的任何React状态更新,我怀疑使用生成器可能对此无效。我肯定要看一些实际的例子。
无论如何,根据博客文章,有几种批处理选项,它们以不同的方式起作用。这都是您要解决的实际用例的问题。