我目前正在这样做:
class Checked extends React.Component {
render() {
return (
<svg width="24" fill="#00ea00" height="24" viewBox="0 0 24 24">
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
</svg>
);
}
}
但我想做这样的事情:
import imgTable from '../img/catering_table.svg'
class Checked extends React.Component {
render() {
return imgTable;
}
}
为什么这不起作用?我在这里返回变量而不是实际内容吗?我原以为这两者是等价的。
PS:Webpack设置正确,我在该文件中的其他位置使用导入,所以不是这样。 (顺便说一下,我在这里使用GatsbyJS)
答案 0 :(得分:4)
选项1 :使用无状态组件换行:
s.layout("MYButton.TButton",[("Button.border", {"children":
[("Button.focus", {"children": [("Button.spacing", {"children":
[("Button.label", {"sticky": "nswe"})], "sticky": "nswe"})], "sticky":
"nswe"})], "sticky": "we", "border": "1"})]
现在您可以将其作为组件导入:
const ImgTable = () => (
<svg width="24" fill="#00ea00" height="24" viewBox="0 0 24 24">
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
</svg>
);
export default ImgTable;
选项2 :使用dangerouslySetInnerHTML(注意名称)。但是,您需要使用类似babel-plugin-transform-svg-import-to-string的内容将SVG转换为导入字符串:
import ImgTable from '../img/ImgTable'
class Checked extends React.Component {
render() {
return <ImgTable />;
}
}
答案 1 :(得分:2)
babel-plugin-inline-react-svg
是一个插件,可让您完成您在问题中所暗示的内容。它只是为svg文件中的每个节点创建一个react组件。然后,它使用您可以轻松命名的根元素包装整个组件树。
像这样import SampleSVG from './sample.svg';
导入你的svg。并在您的应用程序中呈现它,如<SampleSVG />
。它安全而简单。
答案 2 :(得分:-1)
您可以将 SVG 传递给 React 中的变量,如下所示:
const checkIcon = {
icon: <svg data-name="Group 1642" width="25.771" height="25.771" className="info--text-icon" viewBox="0 0 25.771 25.771">
<path data-name="Path 99" d="M11.979 17.51h-.021a.97.97 0 01-.694-.313l-4.889-5.309a.971.971 0 011.429-1.316l4.2 4.566L23.661 3.521a.971.971 0 111.371 1.375L12.665 17.231a.972.972 0 01-.686.279z" fill="#44bbc7" ></path><path data-name="Path 100" d="M12.885 25.771a12.885 12.885 0 010-25.771.971.971 0 010 1.943 10.943 10.943 0 1010.943 10.942.971.971 0 011.943 0 12.9 12.9 0 01-12.886 12.886z" fill="#44bbc7" ></path>
</svg>
};
并调用变量:
const Informations = () => {
return (
<>
{check.icon} This is SVG with React
</>
)
}