javascript - 用反应实时填充搜索
问题描述
现在我的搜索功能是我必须单击搜索图标才能使其显示为结果,因此我想将其更改为实时搜索。当我在输入中输入名称时,它将自动启动为我显示用户卡
这是我的以下代码:
const [searchQuery, setSearchQuery] = useState("");
const handleChange = (event) => {
event.preventDefault();
setSearchQuery(event.target.value);
};
const handleSubmit = async (e) => {
e.preventDefault();
const res = await axios.get(
`/api/v1/search/users/invite/${searchQuery}/${teamId}`
);
setInvitees(res.data[0]);
setShowInvitees(!showInvitees);
};
useEffect(() => {
if (searchQuery === "") {
setInvitees([]);
}
}, [searchQuery]);
<form onSubmit={handleSubmit}>
<div className="invitees-search">
<Button
className="input invitees--search-icon"
style={{ color: "white", backgroundColor: "#00B790" }}
type="submit"
>
<SearchIcon />
</Button>
<input
className="invitees--search_input"
type="text"
name="name"
onChange={handleChange}
placeholder="Name"
aria-label="Search bar"
pattern="^[a-zA-Z0-9 ]+"
required
/>
</div>
</form>
当我的搜索查询长度 >= 2 个字母时,如何使其自动填充?
解决方案
您可以在useEffect
解释:
- 我将您的
handleSubmit
功能重命名为getInvitees
- 长度大于等于2时调用
getInvitees
函数searchQuery
解决方案
useEffect(() => {
if(searchQuery === "") {
setInvitees([]);
}
if((searchQuery||'').length >= 2) {
getInvitees();
}
}, [searchQuery]);
const getInvitees = async () => { // renamed handleSubmit function to getInvitees
const res = await axios.get(`/api/v1/search/users/invite/${searchQuery}/${teamId}`);
setInvitees(res.data[0]);
setShowInvitees(!showInvitees);
};
推荐阅读
- asp.net-core - 如何在不按 CTRL 键的情况下使用 ASP.NET 在选择元素中选择多个项目?
- java - 我在这个程序中遇到了一个排序问题,帮我解决这个问题
- c++ - 为所有 clion 项目包含相同的头文件
- javascript - 对于模型 \"USER\" 的路径 \"_id\" 中的值 \"post\"(类型字符串),转换为 ObjectId 失败
- react-native - 博览会退出后不会发布apk
- swift - Swift 中自动调整大小的集合视图单元格
- html - 是否可以在 HTML 中将字母屏蔽为空格?在这种情况下,我想将 UNDERSCORE(_) 屏蔽为空格
- c++ - Qt 和 C++:斜线、水平线和垂直线
- android - 如何让 Jetpack 组合 IconButton 的宽度以适应儿童的宽度?
- go - 将 http.Response 转换为字节数组