1 回答
TA贡献1826条经验 获得超6个赞
所以首先你需要更新你的使用效果来依赖你的状态而不是一个空数组,否则它只会执行你的函数一次,这意味着你只sortIntoArray用初始状态调用。所以尝试类似的东西
useEffect(() => {
sortIntoArray();
}, [images.idx]);
这意味着每次images.idx状态发生变化时,它都会再次调用你的效果。
其次,在您的sortIntoArray函数中,我发现了一个错误,它将设置为字符串而不是会导致错误posters的数组。map of undefined
我不明白您为什么要尝试将数组分成 3 个部分,然后将海报设置为该数组中的正确项目。所以我更新了你的sortIntoArray功能,看起来像
const sortIntoArray = () => {
let posterImages = [...images.items];
let size = 3;
let posters = posterImages.slice(
images.idx * size,
(1 + images.idx) * size
);
setImages(currenState => ({
...currenState,
posters
}));
};
这里的不同之处在于我们只是使用 slice 抓取正确的小节并将海报设置为等于该小节。
我还必须根据以前的更改将您的下一个功能更新为以下功能
const nextSlide = () => {
let current = images.idx;
let next = current + 1;
let posterLength = Math.ceil(images.items.length / size) - 1;
if (next > posterLength) {
next = posterLength;
}
setImages(currentState => {
return {
...currentState,
idx: next
};
});
};
这里的不同之处在于,我们只是根据将项目总数除以大小来确定海报长度。
你可以在这里看到这一切:https ://codesandbox.io/s/red-snow-1cs0e?file=/src/Slider.js这就是你所追求的吗?
添加回答
举报