我有一些代码,其中有成对的图像,它们都在可滑动的水平图库中。现在,当您单击两个图像的上部时,图像应该关闭切换,所以我所做的是,我将 isImage2Active 设置为状态,然后只需切换它们的源即可。在 iOS 上,它运行完美且完全流畅,但在 Android 上,它几乎根本不起作用。如果你经常点击它,它可能会改变,但这显然不是我想要的行为。
所以我有一个图像组件,它就是所描述的可滑动水平图库
const Images = () => {
const [currentPage, setCurrentPage] = useState(0);
const swiperRef = useRef(null);
return (
<>
item.id}
estimatedItemSize={350}
renderItem={({ item }) => {
return (
<>
>
);
}}
/>
{currentPage !== 2 && (
<>
{
setCurrentPage(currentPage + 2);
}}
>
>
)}
>
);
};
然后在里面我有 Image 组件,当我点击 Pressable 组件内的上面的图像时,它应该触发handleImagePress,然后更改 setIsImage2Active,然后切换图像的来源,但它在 Android 上并没有真正工作,它20 次中有 1 次有效,而且只有当你疯狂地点击它时才会有效。这是性能问题,还是 Pressable 组件的问题?我现在真的很沮丧。
const GalleryImage = React.memo(({ item }) => {
const [isImage2Active, setIsImage2Active] = useState(false);
const [showMatchPost, setShowMatchPost] = useState(false);
const handleImagePress = useCallback(() => {
setIsImage2Active(!isImage2Active);
}, [isImage2Active]);
const switchToMatch = useCallback(() => {
setShowMatchPost(!showMatchPost);
}, [showMatchPost]);
return (
<>
>
)
})
我尝试将其放入 FlatList(Spotify 的 FlashList,这应该会提高性能)中,因为之前我有一个 PagerView 并映射了所有帖子,然后 handleImagePress 会将所有图像更改为 isImage2Active ,这些图像是图库的一部分,但现在我改用单独的 Image 组件,因此只需更新一个 Image,但性能提高了 0。
const [isImage2Active, setIsImage2Active] = useState(false);
const [showMatchPost, setShowMatchPost] = useState(false);
const handleImagePress = useCallback(() => {
setIsImage2Active(!isImage2Active);
}, [isImage2Active]);
return (
<>
>
)
我还创建了另一个屏幕,我仅使用 1 个图像对其进行了测试,它工作得很好,但在 FlatList 内部,存在极端的性能问题。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
尝试优化您的 FlatList 性能和图像。正如我所看到的,它们是从远程 URL 获取的,尝试通过预加载图像来优化那里,或者使用一些优化的图像库(如
react-native-fast-image)来更好地加载图像。