使用ant中的a-tag,点击选中渲染页面中的列表(做筛选),再次点击取消选中且把完整的列表展示出来(不做筛选)->到这个一步之后在重复点击同一个tag就会处在只能把完整的列表展示出来并不会在点击选中渲染。
(tag的列表是这样子的data:[0:{name:xx,id:1,label:[0:{label_id:2},1:{label_id:35}]},1:{name:xx,id:1,label:[0:{label_id:2},1:{label_id:35}]})
您可以使用Ant Design中的Checkbox组件来实现这个功能。首先,您可以根据tag的列表数据生成对应的Checkbox列表,然后使用state来记录当前选中的标签。当点击Checkbox时,将选中的标签添加到state中并重新渲染页面,实现筛选功能。当再次点击已选中的Checkbox时,将选中的标签从state中移除并重新渲染页面,实现取消筛选并展示完整列表的功能。
以下是一个示例代码,您可以根据自己的实际情况进行修改:
import React, { useState } from 'react';
import { Checkbox } from 'antd';
const TagFilter = ({ tagsData }) => {
const [selectedTags, setSelectedTags] = useState([]);
const handleTagChange = (tagId) => {
if (selectedTags.includes(tagId)) {
setSelectedTags(selectedTags.filter((id) => id !== tagId));
} else {
setSelectedTags([...selectedTags, tagId]);
}
};
const renderTagList = () => {
if (selectedTags.length === 0) {
// 没有选中的标签,展示完整列表
return tagsData.map((tag) => (
<div key={tag.id}>
<span>{tag.name}</span>
{/* 在这里展示其他信息 */}
</div>
));
} else {
// 有选中的标签,根据选中的标签筛选列表
const filteredTags = tagsData.filter((tag) =>
tag.label.some((label) => selectedTags.includes(label.label_id))
);
return filteredTags.map((tag) => (
<div key={tag.id}>
<span>{tag.name}</span>
{/* 在这里展示其他信息 */}
</div>
));
}
};
return (
<div>
{tagsData.map((tag) => (
<Checkbox
key={tag.id}
checked={selectedTags.includes(tag.id)}
onChange={() => handleTagChange(tag.id)}
>
{tag.name}
</Checkbox>
))}
{renderTagList()}
</div>
);
};
export default TagFilter;
在上面的代码中,TagFilter组件接受一个tagsData
参数,该参数为一个数组,包含了tag的列表数据。在组件内部,使用useState
来定义selectedTags
状态,用于记录当前选中的标签。当Checkbox被点击时,调用handleTagChange
函数来更新selectedTags
状态。renderTagList
函数根据selectedTags
状态来渲染展示的列表,如果没有选中的标签,则展示完整列表,否则根据选中的标签筛选列表。
您可以将TagFilter
组件添加到您的页面中,并将tag的列表数据作为参数传递给它,然后在页面中使用<TagFilter tagsData={yourTagsData} />
来渲染标签筛选器。