技巧
节流(Throtting)
你可以通过在监听的 Saga 里调用一个 delay 函数,针对一系列发起的 action 进行节流。 举个例子,假设用户在文本框输入文字的时候,UI 触发了一个 INPUT_CHANGED
action:
通过throttle,watchInput不会在500ms内启动一个新的handleInput任务,但在相同时间内,它仍然接受最新的INPUT_CHANGED
到底层的 buffer
,所以它会忽略所有的 INPUT_CHANGED
action。 这确保了 Saga 在 500ms 这段时间,最多接受一个 INPUT_CHANGED
action,并且可以继续处理 trailing action。
防抖动(Debouncing)
为了对action
队列进行防抖动,可以在被fork的任务里放置一个delay。
在上面的示例中,fetchUsersApi
在执行之前等待了500ms
。如果在此期间,接收到的fetchUsersSagaAction
,由于fetchUsers
被delay
阻塞,所以在执行自己的逻辑之前会被watchFetchUsers
所取消。
例如,在 React 严格模式下,通过该方式可有效减少重复的请求。
上面的例子还可以使用redux-saga
的 takeLatest
重写:
最后更新于
这有帮助吗?