Home > database >  React Native SVG loading indicator for remote SVGs
React Native SVG loading indicator for remote SVGs

Time:08-13

I am rendering SVGs from remote URLs:

import { SvgUri } from "react-native-svg";

function RemoteSVG() {
  return (
    <SvgUri
      uri={"https://cdn.orsive.com/avatars/3tYL96SMyBcwUakNphevH-avatar.svg"}
      style={{
        width: 100,
        height: 100,
        backgroundColor: "blue",
      }}
    />
  );
}

I want to show loading indicator/skeleton when the SVG is being fetched and loaded, but SvgUri component from react-native-svg doesn't have onLoad and onLoadEnd props. So, I tried setting backgroundColor, but once the SVG gets loaded, the background of the SVG also gets affected. It kinda looks like this:

avatar

Is there a way to show a loading skeleton when the SVG is being loaded?

CodePudding user response:

Turns out I was using an old version of react-native-svg. I have switched to version 12.4.3 which has the onLoad prop. Here's what I did:

import { useState } from "react";
import { View } from "react-native";
import { SvgUri } from "react-native-svg";

function RemoteSVG() {
  const [loading, setLoading] = useState(true);
  return (
    <>
      <SvgUri
        uri={"https://cdn.orsive.com/avatars/3tYL96SMyBcwUakNphevH-avatar.svg"}
        onl oad={() => setLoading(false)}
        style={{
          width: !loading ? 100 : 0,
          height: !loading ? 100 : 0,
        }}
      />
      {loading && (
        <View
          style={{
            width: 100,
            height: 100,
            backgroundColor: "blue",
          }}
        />
      )}
    </>
  );
}

  • Related