javascript - 单击按钮时,我无法从列表中搜索项目
问题描述
当我在文本框中输入内容并单击搜索按钮时,它会显示该项目
单击按钮时,我无法从列表中搜索项目。我可以直接搜索项目而无需单击按钮,但我想搜索项目时
this.state = {
list: [],
search: '',
}
componentDidMount(){
axios.get("https://restcountries.eu/rest/v2/region/africa").then(res=>
{
this.setState({list : res.data})
})
}
<label className="text-secondary">Search by : </label>
<input type="text" value={this.state.search} onChange={this.valueChange}>
</input>
valueChange = (event) =>{
this.setState({search : event.target.value})
}
<button type="button" className="btn btn-info"
onClick=this.search}>Search</button>
search = () =>{
this.state.list.filter(
(item) => {
return item.name.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 ||
item.capital.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 ||
item.alpha3Code.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1
}
)
}
解决方案
你应该做的是将搜索逻辑移动到一个函数中,并设置 onclick 监听器来触发这个函数。
像这样的东西:
function SomeComponent(props){
const [keyword, setKeyword] = useState("");
const handler = () => {
// Put your search logic here
alert(`Do the search by ${keyword}`);
};
return (
<div className="App">
<input value={keyword} onInput={e => setKeyword(e.target.value)} />
<br />
<br />
<button onClick={handler}>Search</button>
</div>
);
}
推荐阅读
- python - 获取其他元组中一个元组的值
- ruby - 你如何调用 ruby-git push 命令
和 选项? - go - 使用 AppEngine 从 Firestore 读取不一致
- sql - 在oracle中的选择上在一个字段中使用两个表
- canvas - 在 Safari 中将 Blob 加载到 img 时出错(WebKitBlobResource 错误 1。)
- python - 如何使用连续随机生成的字符将字符串填充到长度 = n?
- scala - Scala 将 (...) 添加到 .flatten 和 .max 导致返回 .flatten(...).max(...)
- google-cloud-logging - 使用 Google Cloud Monitoring 检测 requestUrl 的变化
- parallel-processing - 使用分布式数据并行保存的错误加载模型
- api - Outlook Add-in 365 - 此平台不支持 API