自动完成设置后,如何记录最近的搜索请求?

时间:2018-11-05 11:48:26

标签: autocomplete redux-saga

例如,当用户键入android时。

客户端向服务器发送多个请求 即 a an and,依此类推。

我只想将android搜索请求记录在服务器中。
我该怎么办?

我正在考虑以下策略,但想知道是否有更好的策略。

  1. 像以前一样进行自动完成
  2. 如果在用户按下键盘后log this search request已经通过,则发送特殊的1 sec

如果要实现以上所述,那么如何使用redux-saga来做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要在takeLatest种效果中实现debounce。因此,如果您的组件调度了INPUT_CHANGED动作,那么您的传奇故事将如下所示:

import { call, takeLatest, delay } from 'redux-saga/effects'

function* handleLog(action) {
  // debounce by 1 sec
  yield delay(1000); 
  if (action.payload.LOG_THIS_SEARCH_REQUEST) {
     const apiResult = yield api.log(action.payload.value);
     ...  // logic after api call is done
  }
}

function* watchInput() {
  // log latest input change
  yield takeLatest('INPUT_CHANGED', handleLog);
}

因此,在提供的示例中,如果用户在1秒钟内触发了新的输入更改(即再添加一个字母),那么saga将仅处理最新的字母。