javascript - React 中太多的重新渲染

标签 javascript reactjs rendering use-state

该程序应接受用户键入的输入、搜索数据并在下拉列表中返回结果。 当用户输入超过 3 个符号时,将调用 Search() 并且我得到“错误:重新呈现太多”。找不到渲染循环在哪里。

import LTCityNames from "../lt-city-names.json"; //JSON object

const Openweathermap = () => {
     const [searchList, setSearcList] = useState([]); //drop down list according to search word
     const [text, setText] = useState(""); //text in the input field
  
     const Search = (userinput) => {
         let correctResult = "";
         let dropdownList = [];

     const regex = new RegExp(`^${userinput}`, "i");
        for (let i = 0; i < LTCityNames.length; i++) {
           correctResult = regex.test(LTCityNames[i].name);
        if (correctResult){
           dropdownList.push(LTCityNames[i]);
           setSearcList(dropdownList);
        }   
      }
  };

     const onChangeInput = (userinput) => {
       setText(userinput);
       if (userinput.length > 2) {
         Search(userinput);
       }
     };

   return (
     <input
      value={text}
      onChange={(e) => {onChangeInput(e.target.value)} }
      type="text"
      placeholder="Enter address"
     ></input>
     <div id="myDropdownWeather" className="dropdown-content">
       {searchList.map((itemInArray) => {
         return (
           <ul>
             <li>{itemInArray.name}</li>
           </ul>
         );
       })
}

最佳答案

我认为你必须像这样使用 useEffect:

  const [text, setText] = useState(""); //text in the input field

  const lastFilter = useRef(text);

  useEffect(() => {
    if (lastFilter.current !== text && text.lenght>2) {
        Search(userinput);
        lastFilter.current = text;
    }
}, [text]);

 const onChangeInput = (event) => {
   var userinput=event.target.value;
   setText(userinput);
 };

和改变

onChange={(e) => {onChangeInput(e.target.value)} }

onChange={(e) => {onChangeInput(e)} } 

关于javascript - React 中太多的重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63449562/

相关文章:

PHP - LaTeX 渲染

javascript - 尝试通过数组映射来渲染多个 ReactElement 时出错

javascript - 在 Excel 中下载并打开 CSV 适用于 Chrome 和 Firefox,但不适用于 IE 或 Edge

javascript - 使用 Jquery $getJSON 内部的追加方法

reactjs - 有没有办法为 Notepad++ 安装 JSX 语法突出显示/样式?

node.js - 找不到模块 : Can't resolve 'dns' in pg/lib

python-3.x - 如何在极坐标图中弯曲文本?

javascript - Jquery 在循环内生成 Id

javascript - SharePoint 设计器中的 CAML 查询问题

reactjs - React-Day-Picker 弹窗位置