javascript - reactjs中的搜索过滤和下拉过滤
问题描述
在下面的渲染方法中,我在卡片上执行搜索过滤器和下拉过滤器。搜索和 dropdwon 过滤工作正常,但问题是,当我的组件第一次渲染时,我没有在屏幕上看到任何 Card sen。只有当我在下拉列表中输入一些值时,我才会在屏幕上看到卡片。谁能帮我看看我的代码有什么问题,以及如何先显示卡片然后在那里执行过滤和搜索。如果我删除.filter ((data) => data === this.state.filter) ,我将能够在组件渲染时渲染数据,但随后我将不允许执行 dropdwon 过滤器。我认为这个过滤器导致了这个问题,但不知道如何解决它,以及执行搜索和下拉过滤
searchSpace = (event) => {
this.setState({
search: event.target.value,
});
};
sortOptions = [
{value: "ALL", label: "All"},
{ value: "Iphone", label: "Iphone" },
{ value: "Samsung", label: "Samsung" },
];
getSelectedItem = (items, selectedValue) => {
return items.find((item) => item.value === selectedValue);
};
dropdown = (event) => {
console.log("filter", event.selectedItem.value);
this.setState({
filter: event.selectedItem.value,
});
};
render() {
const { details} = this.state;
const items = this.state.details
.filter((data) => {
if (this.state.search == null) return data;
else if (data.includes(this.state.search)) {
return data;
}
})
const data = items
.filter((data) => data === this.state.filter)
.map((data) =>
<>
<ShareCard></ShareCard>
</>
);
return (
<Search placeHolderText="Search" onChange={(e) => this.searchSpace(e)}/>
<Dropdown id="filtering items={this.sortOptions}
onChange={(e) => this.dropdown(e)}
selectedItem={this.getSelectedItem(
this.sortOptions,
this.state.filter
)}
/>
<div>{data}</div>
)
解决方案
由于您this.state.filter
最初离开了undefined
这就是为什么在第一次渲染时您看不到任何结果。
您应该将默认过滤器添加到初始状态:
state: {
filter: "<an initial value based on your data>"
}
或在设置时应用过滤器:
const data = items
.filter((data) => this.state.filter && (data === this.state.filter) ? true: false)
推荐阅读
- ruby - Ruby 记忆和空对象模式
- c# - 在代码隐藏中对其进行动画处理后无法重置滑块值
- javascript - 无法使用 ActiveXObject('Scripting.FileSystemObject') 和 JS 获取子文件夹的名称
- java - 使用 DEROctetString 与纯扩展
- php - 当文件有空格时添加缩进(上传文件)
- java - Java/C++ TCP 套接字接收问题
- node.js - 使用 mongodb 进行登录验证
- python - 忽略 nan 值并执行 numpy.polyval 的函数
- powershell - 将过程信息转换为人类可读的值
- python - Python pip 安装缺少模块 pkgutil