更改 svg 颜色:React.createElement: type is invalid -- 需要一个字符串

Posted

技术标签:

【中文标题】更改 svg 颜色:React.createElement: type is invalid -- 需要一个字符串【英文标题】:Change svg color : React.createElement: type is invalid -- expected a string 【发布时间】:2020-11-21 08:59:22 【问题描述】:

我有一个部分我想单击以更改 SVG 颜色的颜色。

到目前为止,这是我的解决方案:

    import  ReactComponent as DownloadSVG  from 'assets/images/share_download.svg';
        .......
    
    const Demo = () => 
    
        return (
         <div className=`download-options $tab ==='downloadoptions' && 'active-tab'`>
           <span style= backgroundColor: isBlack ? '#262626' : '#F3F3F3' className="download_icon" onClick=handleDownloadTabClick>
                        <DownloadSVG style= fill: isBlack ? '#fff' : '#262626' />
            </span>
          <span className="download_title media-text">DOWNLOAD</span>
         </div>
    )
 
export default Demo;

不幸的是,我收到以下错误:

React.createElement:类型无效 - 需要一个字符串(对于内置组件)或一个类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入

这里有什么问题?

【问题讨论】:

您是否使用create-react-app 来设置您的项目? @kiranvj 这跟我面临的问题有什么关系????? 这和webpack的配置方式有关!!!!!!!!! &&&& CRA 使用 svgr,这让你导入一个 svg 文件作为 React 组件,因此问!!!!! 【参考方案1】:

相信这是tab 变量声明。

试试:

import  ReactComponent as DownloadSVG  from "assets/images/share_download.svg";

const Demo = () => 
  return (
    <div
      className=`download-options $
        tab && tab === "downloadoptions" ? "active-tab" : ""
      `
    >
      <span
        style= backgroundColor: isBlack ? "#262626" : "#F3F3F3" 
        className="download_icon"
        onClick=handleDownloadTabClick
      >
        <DownloadSVG style= fill: isBlack ? "#fff" : "#262626"  />
      </span>
      <span className="download_title media-text">DOWNLOAD</span>
    </div>
  );
;

export default Demo;

为什么会这样

很难真正知道,因为我只能看到部分源代码——所以,我最好的猜测是在初始渲染时,tab 变量尚未定义(尚未),因此是undefined

当您使用简写逻辑这样:tab === "downloadoptions" &amp;&amp; 'active-tab',当&amp;&amp; 之前的部分为假时,javascript 返回 false。这是一个 Boolean 值,其中 React 需要一个 String

将其粘贴到浏览器控制台时可以看到它:

let tab; // this sets the variable, but it is still "undefined"
console.info(tab === "downloadoptions" && 'active-tab'); // returns: false

因此最好使用总是返回字符串的Ternary operator。

像这样:

let tab; // this sets the variable, but it is still "undefined"
console.info(tab && tab === "downloadoptions" ? 'active-tab' : 'nothing'); // returns: "nothing"

【讨论】:

以上是关于更改 svg 颜色:React.createElement: type is invalid -- 需要一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 更改 svg 图像的颜色 [重复]

如何在 HTML 中更改 SVG 中路径的笔触颜色和填充颜色?

svg - 使用 css 更改 svg 颜色并加载外部精灵

SVG 对象从外部 CSS 更改颜色

使用JQuery更改svg内的填充颜色[重复]

使用 css 更改颜色 svg 文件