Javascript UI在useEffect React Native中的API调用时冻结

Javascript UI在useEffect React Native中的API调用时冻结,javascript,reactjs,react-native,matrix,react-redux,Javascript,Reactjs,React Native,Matrix,React Redux,我是React原生应用程序的开源API 我试图通过userId获取用户的化身图像,userId是一个API调用,作为响应,我得到mxc://matrix.org/CrmiGcEWGKrVYUuPpdZtRWVuURL,我再次使用该URL调用了另一个API: https://matrix-client.matrix.org/_matrix/media/r0/download/matrix.org/CrmiGcEWGKrVYUuPpdZtRWVu 在这个响应中,我得到了base64响应 {“文件名”

我是React原生应用程序的开源API

我试图通过userId获取用户的化身图像,userId是一个API调用,作为响应,我得到
mxc://matrix.org/CrmiGcEWGKrVYUuPpdZtRWVu
URL,我再次使用该URL调用了另一个API:

https://matrix-client.matrix.org/_matrix/media/r0/download/matrix.org/CrmiGcEWGKrVYUuPpdZtRWVu

在这个响应中,我得到了base64响应
{“文件名”:“abcd.png”,“内容”:“数据:image/png;base64,iVBOR****”}
关于那个形象 它变得非常沉重,因此我的应用程序冻结了

你能建议任何解决方案来直接获取图像URL或UI冻结问题吗

我在每个屏幕上调用MyImage组件至少10次

export const MyImage = memo((props) => {
       const [style, setStyle] = useState(props.style);
       const [imageData, setImage] = useState(undefined);

       useEffect(() => {
          fetchImage();
       }, []);

       const fetchImage = async () => {
         try {
            if (
                imageData == undefined &&
                (props?.mxcUrl?.length || props?.userId?.length)
               ) {
                    await fetchImageUrl(props, "avatar").then((response) => {
                          setImage(response?.response?.data?.content || avatar_placeholder);
                    return response;
                    });
               } else {
                       setImage(avatar_placeholder);
                   return '"avatar_placeholder"';
               }
             } catch (error) {
                    setImage(avatar_placeholder);
                return error;
            }
          };

   return (
         <Suspense
             fallback={<Image uri={{uri:avatar_placeholder}} style={{ ...style }} {...props} />}>
           <Image
                uri={{uri:imageData || avatar_placeholder}}
                style={{ ...style }} {...props}
           />
         </Suspense>
      );
}, isEqual);
export const MyImage=memo((道具)=>{
const[style,setStyle]=useState(props.style);
常量[imageData,setImage]=使用状态(未定义);
useffect(()=>{
fetchImage();
}, []);
const fetchImage=async()=>{
试一试{
如果(
imageData==未定义&&
(props?.mxcUrl?.length | | props?.userId?.length)
) {
等待fetchImageUrl(道具,“化身”)。然后((响应)=>{
setImage(响应?响应?数据?内容| |化身|占位符);
返回响应;
});
}否则{
setImage(头像占位符);
返回“头像占位符”;
}
}捕获(错误){
setImage(头像占位符);
返回误差;
}
};
返回(
);
},相等);
PS:这只发生在Android上,而不是在iOS上,我想这与js线程有关