- Published on
Convert the React SVG component into a Base64 URL
- Authors
- Name
- Li WenKang
- https://x.com/liwenkang_space
When working with React and third-party modules, some modules may not accept SVG as React components directly. In such cases, you need to convert the React SVG component into a real DOM element and then into a Base64 URL.
import React from 'react';
import ReactDOMServer from 'react-dom/server';
// Convert an SVG string to a Base64 encoded URL
const svgToBase64 = (svgString) => {
// Encode the SVG string as a UTF-8 byte array
const utf8Bytes = new TextEncoder().encode(svgString);
// Convert the byte array to a binary string
const binaryString = Array.from(utf8Bytes)
.map((byte) => String.fromCharCode(byte))
.join(''); // Join the array into a single string
// Encode the binary string to Base64
return 'data:image/svg+xml;base64,' + btoa(binaryString);
};
// Convert a React SVG component to a Base64 URL
const convertReactDOMToBase64Url = (reactDOM) => {
// Render the React component to a static HTML string
const htmlString = ReactDOMServer.renderToStaticMarkup(reactDOM);
// Parse the HTML string to a document object
const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, 'text/html');
// Get the outer HTML of the first child element
const outerHTML = doc?.body?.firstChild?.outerHTML || ''; // Fallback to an empty string if not found
// Convert the outer HTML to a Base64 URL
return svgToBase64(outerHTML);
};
// Example: Create a simple React component
const testDOM = <div>testDOM</div>;
// Convert the React component to a Base64 encoded URL
convertReactDOMToBase64Url(testDOM);