javascript - 多个过滤器,一个 onChange 函数
问题描述
我的结构:
index.js
--> Filters
--> {list}
过滤器包含多个输入元素,它们通过 props 在 index.js 中设置状态。list 如您所料,显示一个元素列表。我现在想根据过滤器返回的值过滤这个列表。相当标准,我认为并在数百万个网站上找到。
问题是我想让输入 onChange 函数可重用。在过滤器组件中只有一个输入,我有这个(缩短):
<input
value={this.state.anySearch}
onChange={this.handleChange}
/>
handleChange = event => {
const value = event.target.value;
this.setState({ anySearch: value });
};
我尝试了多个输入,也可以对任何输入重复使用:
handleChange = name => event => {
const value = event.target.value;
this.setState({ name: value });
};
onChange={this.handleChange("anySearch")}
但这不再起作用了。状态现在在控制台登录时一次只显示一个字母。
根据多个不同的标准 à la kayak进行过滤的最佳做法是什么,以及如何在不将每个字母推入数组的情况下重写 handleChange 函数?
解决方案
handleChange = name => event => {
const value = event.target.value;
this.setState({ name: value });
};
您返回函数的想法是正确的,只是在设置状态时出错
this.setState({ name: value });
将其更改为
this.setState({ [name]: value });
关于第二个问题,您可以简单地遍历您的数组并过滤掉与该特定条件匹配的对象,以避免不必要的开销,您可以实现一个缓存机制来跟踪用户已经完成的搜索。
像这样的东西:
function filter(criteria) {
if(cache[criteria]) {
return cache[criteria];
}
cache[criteria] = myArray.filter(elem => elem.criteria === criteria);
return cache[criteria];
}
推荐阅读
- node.js - 两个不同的 Node.js 服务器如何与一个猫鼬模式通信?
- c - 将整个 unsigned char 数组返回给 main
- amazon-web-services - 如何向 Lambda 函数授予 Athena 查询权限?
- python-3.x - Pandas Dataframe,对按多列分组的单个值求和
- html - 亚像素和字母间距
- mysql - 从两个表中删除两个表中 id 相等的行
- r - 合并两个表并在 R 中只保留重复的值
- network-programming - 自定义通信协议的良好设计是什么?
- json - 发生错误 400(错误请求)时,使用 Axios 从 POST 捕获返回 json
- bash - 如何从一个字符串中提取两条数据