【问题标题】:How dispaly an svg on the option of select with ReactJs?如何在 React Js 的选择选项上显示 svg?
【发布时间】:2020-09-19 19:35:15
【问题描述】:

我有一个选择标志,其中选项是 img(其中 src 是 svg)

我的codeSandbox


Config.default = "fr";
Config.list = {
  de: {
    text: "Deutsch",
    icon: require("./images/de.svg")
  },
  en: {
    text: "English",
    icon: require("./images/eng.svg")
  },
  it: {
    text: "Italiano",
    icon: require("./images/italy.svg")
  }
};
class App extends Component {
  constructor() {
    super();

    this.state = {
      language: Config.default
    };
  }

  render() {
    return (
      <header className="d-flex align-items-end justify-content-end">
        <LanguageList Language={this.state.language} />
        <FormControl variant="outlined">
          <div className="wrap-select">
            <Select
              value={this.state.language}
              className="select-lang"
              onChange={e => this.setState({ language: e.target.value })}
              inputProps={{
                name: "locale"
              }}
            >
              <MenuItem value="en">
                <div className="wrap-content-lang">
                  <img width="20" src="./images/eng.svg" />
                </div>
              </MenuItem>
              <MenuItem value="it">
                <div className="wrap-content-lang">
                  <img width="20" src="./images/italy.svg" alt="it" />
                </div>
              </MenuItem>
              <MenuItem value="de">
                <div className="wrap-content-lang">
                  <img width="20" src="./images/de.svg" />
                </div>
              </MenuItem>
            </Select>
          </div>
        </FormControl>
      </header>
    );
  }
}

当我运行它时,我得到:

图片不显示,如何显示?

【问题讨论】:

    标签: javascript reactjs svg webpack create-react-app


    【解决方案1】:

    问题是这样的src 路径在运行时不可用:

    <img width="20" src="./images/eng.svg" alt="en" />
    
    // instead
    <img src={require("./images/eng.svg")}/>
    

    在构建时,webpack 会生成一个散列路径,参见 Adding Images, Fonts, and Files@gdh answer

    import { ReactComponent as GermanFlag } from "./images/de.svg";
    
    class App extends Component {
      render() {
        return <GermanFlag />;
      }
    }
    

    【讨论】:

    • 确实很好的答案和解释......并且很高兴了解import { ReactComponent as..... :)
    【解决方案2】:

    通过create react app,要显示svg,可以使用import来显示图片。

    import ItalySVG from './images/italy.svg'
    

    或者 - 你可以要求它。

    <img src={require("./images/italy.svg")}/>
    

    然而,由于open issue

    如果您在代码沙箱中工作,那么现在您可以使用图像来代替。有用。见working demo

    【讨论】:

    • 我想知道为什么导入 svg 的路径不起作用-_-,很好!
    • 啊 .. 抱歉,我不得不做一个小更新...现在可以使用(相同的链接)..
    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2021-12-17
    • 2021-08-23
    • 2022-07-06
    • 1970-01-01
    • 2021-11-07
    • 2022-01-08
    • 2020-01-17
    相关资源
    最近更新 更多