自动完成时如何记录最后一个搜索请求?

how to log the last search request when autocomplete is in place?

例如,当用户键入 android 时。

一个客户端向服务器发送多个请求 即 a an and 等等。

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

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

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

如果我要实现上面的内容,将如何使用 redux-saga 来实现?

您需要在一堆 takeLatest 效果中实施 debounce。因此,如果您的组件分派 INPUT_CHANGED 操作,那么您的 saga 将如下所示:

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 将只处理最新的一个。