javascript - react : Returning SVG contents as variable?

标签 javascript reactjs svg gatsby

我目前正在这样做:

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)

最佳答案

选项 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;

现在您可以将其作为组件导入:

import ImgTable from '../img/ImgTable'

class Checked extends React.Component {
  render() {
      return <ImgTable />;
  }
}

选项 2:使用 dangerouslySetInnerHTML (注意名字)。但是,您需要在导入时使用 babel-plugin-transform-svg-import-to-string 之类的东西将 SVG 转换为字符串。 :

import imgTable from '../img/catering_table.svg' // this will return a string

class Checked extends React.Component {
  render() {
      return <div dangerouslySetInnerHTML={{__html: imgTable }} />;
  }
}

关于javascript - react : Returning SVG contents as variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46829592/

相关文章:

java - 解析和插值 SVG 路径

javascript - jquery/css 将文本自底向上包装

javascript - 如何在 React Js 中显示数据到表格?

reactjs - react 所需对象中数组属性的默认 Prop

javascript - ReactJS + Material UI 奇怪的行为

javascript - 如何使用 JQUERY 在 IF 中添加另一条语句

javascript - 当一切都解决后,在页面加载时发布事件

javascript - 如何使用 WinJS 一次保存多个文件?

javascript - 当响应上下文变量更改时页面不会重新渲染

svg - 如何在保持整个像素的同时缩放 SVG <image>?