【发布时间】:2021-07-29 03:06:06
【问题描述】:
我已经设置了一个搜索栏来从后端获取数据并返回它。
代码:
const App = () => {
const[datas,setDatas] = useState([]) //NOthing to do with this.
const [space,setSpace] = useState(null)
const [print, setPrint] = useState(false)
function getData(val){
console.log(val.target.value)
setSpace(val.target.value);
setPrint(false)
}
console.log(space) //Returning inputted text in console. Works well
useEffect(() => {
const fecthPosts = async () => {
let initial_url = `http://localhost:4000/search`
let url = initial_url + "?text=" + space
const res = await fetch(url);
const {result} = await res.json();
setDatas(result);
fecthPosts();
},[space]);
return(
<div className="App">
{ //Displaying on search
print?
<>
<h2>{space}</h2> //submited text
<div>
{results.map((field) =>
<p>{field.title}</p>
<p>{field.author}</p>
)}
</div>
</>
:null
}
<input type="text" onChange={getData} />
<button onClick={() => setSpace(true)}>search</button>
</div>
)
}
};
export default App;
现在,这段代码运行良好。
但是当我点击Network Tab时,
它从我输入的每个文本中获取数据。 onChange的问题
search?text=s
search?text=sa
search?text=sam
search?text=sams
search?text=samsu
search?text=samsun
search?text=samsung
我不希望这种情况发生,因为我发送的请求数量有限。
请任何人帮助解决这个问题。我已经尝试了几件事,但没有任何工作......
注意:我不能使用Timeout 和任何其他有效的方法...只有在用户press enter 或click the button 时才搜索或获取数据。
【问题讨论】:
-
您可以添加一个超时来实现这一点。请查看此链接stackoverflow.com/questions/51855807/…
-
不,我不能使用
TImeoutbcz 使用也可以在此页面上重定向http://localhost:3000/search?query=Samsung
标签: javascript reactjs input onchange