【发布时间】:2022-01-07 13:03:16
【问题描述】:
我使用 react-photoswipe-gallery 为投资组合页面渲染一些图像。我还做了一个无限滚动功能,所以它最初只加载 10 个项目。现在它基于按钮工作,并在单击时添加了 10 多个项目,但我计划将其更改为滚动。到目前为止,一切都按预期工作,这就是画廊和无限滚动的工作方式:
const loadLimit = 10;
const [galleryItems, setGalleryItems] = useState(
galleryData.slice(0, loadLimit)
);
const [visibleItems, setVisibleItems] = useState(loadLimit);
const [selectedOption, setSelectedOption] = useState([]);
const loadMore = () => {
const newVisible = visibleItems + loadLimit;
const newItems = galleryItems.concat(
galleryData.slice(visibleItems, newVisible)
);
setVisibleItems(newVisible);
setGalleryItems(newItems);
};
由于会有很多图像,我还想添加一个使用 react-select 并启用 isMulti 的类别过滤器。从我在控制台中检查的内容来看,我的目标是正确的,类别设置正确。它仅在未选择任何内容时才有效 - 通过显示来自任何类型类别的每个图像。一旦我选择了一个类别,我需要点击加载更多按钮,它会再次显示每个可用的图像,而不是按类别。
useEffect(() => {
if (selectedOption.length === 0)
return setGalleryItems(galleryData.slice(0, loadLimit));
const filteredData = galleryData
.filter((item) => item.category === selectedOption.value)
.slice(0, loadLimit);
setGalleryItems(filteredData);
}, [galleryItems, selectedOption]);
<Select
components={makeAnimated()}
options={filterOptions}
value={selectedOption}
onChange={setSelectedOption}
placeholder="Filter by category"
isMulti
/>
selectedOptions 是一个包含类别名称的简单数组。
galleryItems 是一个对象数组,结构如下:
{
source: imageSource,
category: 'category-name'
}
【问题讨论】:
标签: javascript arrays reactjs react-hooks