Вариант использования:
- БД содержит список имен виджетов, которые может видеть каждый пользователь
- Каждый виджет является модулем_узла
- Нам нужнодинамически загружать модуль узла виджета в пользовательском интерфейсе
Пример:
import React from 'react'
import axios from 'axios'
import { StaticRouter,Route, Switch, NavLink } from 'react-router-dom';
const AsyncComponent = (moduleName) => {
return require('../node_modules/' + moduleName) //This line is not working if the moduleName is mentioned at runtime, if it is statically mentioned then it works fine.
//or something like
return import('../node_modules/' + moduleName)
}
export default class Dashboard extends React.Component{
state = {
widgets : [],
appIsMounted: false
}
componentDidMount(){
axios.get('/widgets', (response) => { //DB contains list of widgets names for the specific user and there will be node_module for each widget or functionality.
this.setState({
widgets: response.data //list of functionalities or widgets to show in the UI
})
})
}
render(){
return (
<StaticRouter>
<div>
**strong text** {
this.state.widgets && this.state.widgets.map(module => {
return <nav>
<NavLink to={`/${module}`} exact activeClassName="active">{module.module}</NavLink>
</nav>
})
}
</div>
<div>
<Switch>
{
this.state.widgets && this.state.widgets.map(module => {
return <Route path={`/${module}`} exact component={AsyncComponent.bind(this, module)} />
})
}
</Switch>
</div>
</StaticRouter>
)
}
}
Пожалуйста, дайте мне знать, если кто-нибудь сталкивался с этой проблемой.