Is this a bug report?
Yes
Did you try recovering your dependencies?
Yes
Which terms did you search for in User Guide?
SVG, ReactComponent, dynamic import
Environment
System:
OS: macOS 10.14
CPU: x64 Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz
Binaries:
Node: 10.11.0 - /usr/local/bin/node
Yarn: 1.7.0 - /usr/local/bin/yarn
npm: 6.4.1 - /usr/local/bin/npm
Browsers:
Chrome: 69.0.3497.100
Firefox: 61.0.2
Safari: 12.0
npmPackages:
react: ^16.5.2 => 16.5.2
react-dom: ^16.5.2 => 16.5.2
react-scripts: 2.0.3 => 2.0.3
npmGlobalPackages:
create-react-app: 2.0.2
Steps to Reproduce
- Try to import SVG as ReactComponet using import(). Example code below
Expected Behavior
SVG loads
Actual Behavior
Got following error in browser
Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
This happens because importing module doesn't contain ReactComponent property. Here's console.log output from demo
Module {default: "/static/media/logo.5d5d9eef.svg", __esModule: true, Symbol(Symbol.toStringTag): "Module"}
Reproducible Demo
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor (props) {
super(props)
this.logoComponent = 'div'
}
componentDidMount () {
import('./logo.svg').then((m) => {
console.log(m)
this.logoComponent = m.ReactComponent
this.forceUpdate()
})
}
render() {
const Logo = this.logoComponent
return (
<div>
<Logo />
</div>
)
}
}
export default App;
Workaround
- Create file with following content
import { ReactComponent as Logo } from './logo.svg'
export default Logo
- Use dynamic import as usual for this file
Is this a bug report?
Yes
Did you try recovering your dependencies?
Yes
Which terms did you search for in User Guide?
SVG, ReactComponent, dynamic import
Environment
Steps to Reproduce
Expected Behavior
SVG loads
Actual Behavior
Got following error in browser
This happens because importing module doesn't contain ReactComponent property. Here's console.log output from demo
Reproducible Demo
Workaround