javascript - ReactJS - 异步自动完成 API 响应处理

标签 javascript reactjs asynchronous async-await axios

背景

我是 ReactJS 新手,需要创建一个具有自动完成功能的搜索字段:

  1. 允许自由类型
  2. 每个用户输入触发API请求返回匹配数组的列表
  3. 自动建议应显示最新结果

问题

API 响应以非线性顺序返回;第一个请求可能会晚于第二个请求响应,这导致状态存储不是最新请求。

export const SearchBar = () => {

const [state, setState] = useState({list: []})

const apiHandler = (term) => {
  axois.post('www.abc.com',term)
    .then((r)=> {setState({list: r.data})})
}

return(
...
)}

有什么方法可以解决这个问题?

谢谢。

最佳答案

正如已经建议的,您应该使用去抖动策略避免每次击键都点击 api。 无论如何,如果您不介意过多的请求给您的服务器带来压力,您可以使用 ref hook 来确保 api 的响应仍然相关。

我在这里创建了一个包含大量注释的工作示例: https://codesandbox.io/s/awesome-leakey-kil2e?file=/src/App.js

关于javascript - ReactJS - 异步自动完成 API 响应处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66164919/

相关文章:

javascript - 基于滚动位置的翻转动画

javascript - 无法从 'selectionStart' 读取 'HTMLInputElement' 属性 :

javascript - Redux-reducer 已成功更新,但连接组件的 componentWillReceiveProps 仍显示旧状态

node.js - 在NodeJS中,事件处理程序中的 `fs.writeFile()`会在某个时间点阻塞主线程吗?

javascript - Redux Thunk 用于简单的异步请求

javascript - 将 Double 转换为 String 而不会在 javascript 中丢失精度

javascript - JavaScript 中的 'Execution Context' 到底是什么?

javascript - React 新手 => 元素类型无效 : expected a string

javascript - 在 React 中处理巨大的 10 列表排序的最佳方法?

python - 如何将异步生成器合并到 python 3.5+ 中的普通生成器中