【问题标题】:How to implement autocomplete user search in React and Django Rest Framework如何在 React 和 Django Rest Framework 中实现自动完成用户搜索
【发布时间】:2021-05-19 01:08:09
【问题描述】:

所以基本上我想在 react 中实现一个用户搜索系统,它会向我的 django 后端发送一个 api 请求,该后端会发回结果。如果我想在点击搜索后得到结果,但我希望结果显示为自动完成,这是一个简单的实现。例如,在 Twitter 中,它会自动完成您正在搜索的内容。我将如何实现这一点。如果有帮助,我将使用 axios 来处理我的请求。附带说明一下,我想在发送请求之前等待一两秒钟,因为我想发送许多请求并减慢服务器的速度。谢谢!

【问题讨论】:

    标签: reactjs django django-rest-framework axios


    【解决方案1】:

    配方:任何 HTTP 客户端(带/不带可取消的 HTTP 客户端),谴责功能(lodash 有一个很好的),CSS 设计显示结果的套装。

    这是基本思想 您创建了一个废弃函数并获取该函数的一个可以取消的实例,因此每次用户点击搜索栏时,我们都会取消对该函数的旧订阅并使用新的废弃超时重新订阅,当超时结束时,我们调用该函数点击 API 并获取响应(代表自动完成响应)以根据需要显示。

    import React, { useState } from 'react';
    import axios from 'axios';
    import { debounce } from 'lodash';
    
    let debouncedFunction: any;
    
    
    function App() {
    
      const [inputValue, setInputValue] = useState('');
    
      const onSearchChange = (event: any) => {
        try {
    
          setInputValue(event.target.value);
    
          /**
           * cancel old saved debounced functions
           */
          if (debouncedFunction && debouncedFunction.cancel)
            debouncedFunction.cancel();
    
          debouncedFunction = debounce(async () => {
    
            // use event value if you want in request
            const response: any = await axios.get(
              'https://jsonplaceholder.typicode.com/todos/1' + `?test=${event.target.value}`
            );
    
            if (response.data) {
              console.log('autocomplete results...')
            }
    
    
          }, 2000);
          debouncedFunction();
    
    
        } catch (error) {
          console.error(error);
        }
      }
    
      return (
        <div >
    
          <input
            value={inputValue}
            onChange={onSearchChange}
            placeholder="Search with autocomplete..."
          />
    
        </div>
      );
    }
    
    export default App;
    
    

    显示自动完成结果的其余部分留给您的应用显示更适合您的内容

    这里是一个链接,可以根据需要下载和调整

    https://github.com/lalosh/stackoverflow-autocomlete-example

    抱歉,很忙。

    【讨论】:

    • 天哪,感谢您经历了这样的麻烦! Mashallah(我不知道我是否正确使用)。
    • @Darkstar 很抱歉,但是在忙碌的生活中,即使是解决方案的线索也很重要,我承诺将代码发布,如果您愿意,我准备与您讨论只要我们俩都有时间。
    • 我认为没有必要。我明白你在做什么。我不知道 lodash 或 debounce,所以这是一个相当棘手的实现。再次感谢您!
    猜你喜欢
    • 2017-10-07
    • 2020-09-02
    • 2013-02-17
    • 1970-01-01
    • 2021-03-03
    • 2012-09-20
    • 2012-06-08
    • 2015-07-05
    • 1970-01-01
    相关资源
    最近更新 更多