How to import components dynamically in React.js
Posted on January 26, 2021 in
1 min read
If you need to import a bunch of React.js components in a dynamic way, here the tip.
Let's assume you have a folder with a list of React.js components you want to include automatically at build time.
I'm also assuming you're using CRA scaffolding, or a Webpack based tooling.
Here the javascript that loads and creates an array of ready-to-use React.js components:
// look in a specific folder .js files
const requireComponent = require.context(
'../myDynComps',
false,
/.js$/
)
const list = []
requireComponent.keys().forEach((fileName) => {
const componentConfig = requireComponent(fileName)
const componentName = fileName
.replace(/^\.\//, '')
.replace(/\.\w+$/, '')
.replace(/js/, '')
const CompTag = componentConfig.default
list.push({
label: componentName,
comp: <CompTag />
})
})
export default list
Now you can list the available components and render the selected one:
import { useState } from 'react'
import list from './utils/loadComponents.js'
function App () {
const [comp, setComp] = useState(list.length - 1)
const handleChange = (e) => {
const index = e.target.value
setComp(index)
}
return (
<div className='app'>
{list[comp].comp}
<select value={comp} onChange={handleChange}>
{
list.map((d, i) => (
<option key={d.label} value={i}>{d.label}</option>
))
}
</select>
</div>
)
}
export default App