状态更新在 Android 上的 React-Native 中不起作用
P粉541551230
P粉541551230 2024-04-06 16:54:10
[React讨论组]

我有一些代码,其中有成对的图像,它们都在可滑动的水平图库中。现在,当您单击两个图像的上部时,图像应该关闭切换,所以我所做的是,我将 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 内部,存在极端的性能问题。

P粉541551230
P粉541551230

全部回复(1)
P粉805931281

尝试优化您的 FlatList 性能和图像。正如我所看到的,它们是从远程 URL 获取的,尝试通过预加载图像来优化那里,或者使用一些优化的图像库(如 react-native-fast-image )来更好地加载图像。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号