gpt4 book ai didi

reactjs - 将 React SVG 组件渲染为 backgroundImage

转载 作者:行者123 更新时间:2023-12-04 13:18:02 28 4
gpt4 key购买 nike

我正在尝试渲染一个返回 <svg> 的 React 组件作为 backgroundImage<div> .
目前我正在使用 ReactDOMServerrenderToStaticMarkuprenderToString但没有显示:

const SvgComponent = () => {
return (
<svg xmlns='http://www.w3.org/2000/svg'><rect fill='red' x='0' y='0' /></svg>
)
}

const ParentComponent = () => {
return (
<div
className={classes.banner}
style={{
backgroundImage: `url("data:image/svg+xml;utf8, ${ReactDOMServer.renderToStaticMarkup(<SvgComponent />)} ")`
}}
>
</div>
)
}

请问包 jsx-to-string怎么做?

最佳答案

您必须使用 encodeURIComponent() 对 SVG 数据进行 URI 编码,因为如果不是 URI 编码,React 将不会渲染 SVG 数据。所以,

const svgString = encodeURIComponent(renderToStaticMarkup(<SvgComponent />));
另外,在 <rect> 中设置宽度和高度SVG 之类的,
<rect fill="red" width={100} height={100} />
所以最终的代码应该是这样的,
import ReactDOM from "react-dom";
import { renderToStaticMarkup } from "react-dom/server";
import React from "react";

const SvgComponent = () => {
return (
<svg xmlns="http://www.w3.org/2000/svg">
<rect fill="red" width={100} height={100} />
</svg>
);
};



const ParentComponent = () => {
const svgString = encodeURIComponent(renderToStaticMarkup(<SvgComponent />));
return (
<div
style={{
backgroundImage: `url('data:image/svg+xml;utf8, ${svgString}')`,
width:500,
height:500
}}
>
</div>
)
}

ReactDOM.render(<ParentComponent />, document.getElementById("root"));
我在 CodeSandbox 中设置了相同的,
Edit React example

关于reactjs - 将 React SVG 组件渲染为 backgroundImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57789530/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com