javascript - 通过 React 中的输入过滤来自 API 的数据
问题描述
我目前有一个下拉菜单和一个搜索栏来搜索数据,但我遇到了一些问题。
API 看起来像这样:
{
"id": 1,
"first_name": "Rodrick",
"last_name": "Costar",
"birthdate": "1944-05-06T04:22:45Z",
},
我目前有这个来设置我的状态
const [data, setData] = useState([]);
const [searchNameFilter, setSearchNameFilter] = useState(data)
我用来通过输入搜索名称的功能是
常量搜索名称 = 事件 => {
let name = event.target.value.toLowerCase()
let result = []
console.log(name)
result = data.filter((d) => {
return d.first_name.search(name)
})
setSearchNameFilter(result)
}
对于输入的返回函数,我有:
<input name="name" type="text" onChange={(event) => searchNames(event)} />
<main className="container">
{data.map(user => {
return (
<div className="row">
<div>{user.first_name}{user.last_name}</div>
<div>{user.birthdate}</div>
该功能有效,但它没有过滤我需要的东西。当我控制台日志时,它会显示我正在输入的字符,但它似乎没有过滤任何内容。我还希望它过滤它,以便它可以搜索名字或姓氏,但我将它设置为名字来测试它。
解决方案
对于您的.search()
用例,它不起作用,因为它需要正则表达式(MDN)。尝试使用.includes()
方法(MDN)
就像是:
<input name="name" type="text" onChange={searchNames} />
function searchNames(ev) {
const searchString = ev.target.value.toLowerCase();
const result = data.filter(({ first_name }) => first_name.toLowerCase().includes(searchString));
setSearchNameFilter(result);
}
推荐阅读
- python - Django 显示页面源而不是我的网页
- php - 在 laravel 的表中搜索数据
- python - matplotlib xlim TypeError:“int”和“list”实例之间不支持“>”
- laravel - Laravel 项目中的变量问题
- elasticsearch - 在弹性搜索中结合术语和布尔查询
- javascript - 如何从 VueJS 中的 HTML 模板加载特定组件?
- pandas - 计算 pandas 行中非 NaN 值的数量和长度
- java - 而使用 JAVA 长数字将 TXT 解析为 CSV 正在转换为指数
- javascript - 仅在开发模式下禁用 linter,而不是在尝试提交更改时禁用
- reactjs - 我不明白 redux 函数中的连接是如何工作的