doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:5016回复:0

[react]react动态生成路由

楼主#
更多 发布于:2020-07-04 14:44
react根据后台数据,动态生成路由
import loadable from '@loadable/component'
constructor(){
       super();
       this.state={
           routerList:[]
       }
   }
   bindRouter(list){
     let routerList= list.map((item)=>{
           if(item.menuChilds.length===0){
               return  <Route key={item.menuId} path={item.menuUrl} component={ loadable(() => import(`./${item.componentPath}`))}/>
           }else{
              return  <Route key={item.menuId} path={item.menuUrl} render={() =>{
                  let ComponentName =loadable(() => import(`./${item.componentPath}`));
                  return <ComponentName {...this.props}>
                       {this.bindRouter(item.menuChilds)}
                   </ComponentName>
                      }}>
              </Route>
           }
       })
     return routerList;
   }
   componentDidMount(){
       let menuList =this.bindRouter(this.props.user.user.menuInfo);
       this.setState({
           routerList :menuList
       })
   }

注:上面的代码是子路由嵌套在父路由中显示的代码,但有些子路由不用嵌套在父路由里显示,就可以用以下的代码
let routerList= list.map((item)=>{
            if(item.menuChilds.length===0){
                return  <Route key={item.menuId} path={item.menuUrl} component={ loadable(() => import(`./${item.componentPath}`))}/>
            }else{
                 return [...this.bindRouter(item.menuChilds),<Route key={item.menuId} path={item.menuUrl} component={ loadable(() => import(`./${item.componentPath}`))}/>]
            }
        })
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号