Transform SVG files into React components, Native and/or Web, JavaScript and/or TypeScript. Without minimal dependencies.
npm install react-from-svgreact-from-svg --help
Usage
  $ react-from-svg <sourcePath> <outputPath> [--with-native|--with-web]
Options
  --with-native, -rn                    Output code for react-native-svg
  --with-native-for-typescript, -rnts   Output code for react-native-svg with TypeScript
  --with-web, -rnw                      Output code for DOM. If --with-native is also used, will be output as .web.js files
  --with-web-for-typescript, -rnwts     Output code for DOM with TypeScript. If --with-native is also used, will be output as .web.tsx files
  --remove-fill, -rf                    Remove all 'fill' properties from SVGs, convenient for icons
  --remove-stroke, -rs                  Remove all 'stroke' properties from SVGs, convenient for icons
  --allow-override-fill, -aof           --allow-override-fill, -aof           Replace all 'fill' properties by a dynamic prop (fills) in SVGs, e.g. fill={fills[N]}.
Example
  $ react-from-svg src/svgs src/svgs/components --with-web-for-typescript --allow-override-fillGenerated components will allow you to inject all the props you could use on an <svg>/<Svg>, such as:
- width
- height
- fill(if you use- --remove-fill)
- stroke(if you use- --remove-stroke)
- style
Need you to have:
Note: if you use React Native for Web, see requirements below.
Need you to have:
- React
- React Native (or an alternative platform like React Native Web)
- react-native-svg
Remove all fill properties from SVGs, convenient for icons.
Remove all stroke properties from SVGs, convenient for icons.
Replace all fill properties by a dynamic prop (fills) in SVGs, e.g. fill={fills[N]}.
If fills[N] is undefined, fallback to the original value (except if --remove-fill is used). Useful to dynamically control icon color(s).
When using --allow-override-fill, you can pass children to the component to override the fill(s).
You can for example update a black SVG path to one using a gradient.
Assuming you have a SVG in src/svgs/logo.svg, let's generate an SVG component :
react-from-svg src/svgs src/svgs/components --with-web-for-typescriptYou should have an SVG component in src/svgs/components/SVGLogo.tsx.
Now let's boost this SVG component to use a gradient.
import SVGLogo from "@/src/svgs/components/SVGLogo";
import { colors } from "@/src/tokens.stylex"; // your colors could be just a simple object
const logoGradientId = "logo-gradient-id";
export default function LogoWithGradient() {
  return (
    <SVGLogo width={149} height={32} fills={[`url(#${logoGradientId})`]}>
      <linearGradient x1="50%" y1="100%" x2="50%" y2="0%" id={logoGradientId}>
        <stop stopColor={colors.textSecondary} offset="0%"></stop>
        <stop stopColor={colors.textTertiary} offset="100%"></stop>
      </linearGradient>
    </SVGLogo>
  );
}That's it. You started from a simple single color SVG path and ended up with a gradient SVG path.