react-router-dom怎样写子路由页面,嵌套路由,类似 router-view+name,渲染指定内容。

36 篇文章 0 订阅
14 篇文章 0 订阅

一、场景需求

如图,需要在一个路由中加入三个子路由,需要类似 vue的 【router-view+name】。

请添加图片描述请添加图片描述请添加图片描述

二、实现

./pages
├── App.js
├── threeChildren.js
└── aaa.jsx
└── bbb.jsx
└── ccc.jsx

App.js

import React, { Component } from "react";
import { HashRouter, Switch, Route, Redirect } from "react-router-dom";
import ThreeChildren from "../threeChildren"

class App extends Component {
  render() {
    return (
      <HashRouter>
        <Switch>
          ...
          {/* <Route path="/ThreeChildren" component={ThreeChildren} exact /> */}
          {/* 注意这里,如果嵌套路由的话,一定不能加 exact */}
          <Route path="/ThreeChildren" component={ThreeChildren} />
          ...
        </Switch>
      </HashRouter>
    );
  }
}

export default App;

ThreeChildren.js

import React, { PureComponent } from 'react'
import { Route, Switch } from 'react-router-dom'
import aaa from "./aaa"
import bbb from "./bbb"
import ccc from "./ccc"

const list = [
	{ path:"/threeChildren/aaa", component:aaa, },
	{ path:"/threeChildren/bbb", component:bbb, },
	{ path:"/threeChildren/ccc", component:ccc, }
]

class Index extends PureComponent {
  routergo = (path) =>{
    this.props.history.push(path)
  }

  render() {
    return (
      <div>
      	// 左侧的按钮列表
        <div className="list-menu">
          {list.map(item=> 
          	<div key={item.path} onClick={()=>this.routergo(item.path)}>
           		{item.path}
           	</div>
          )}
        </div>
		// 右侧的嵌套路由视图
        <div>
          <Switch>
            {list.map(item=>{
            	const { path, component, } = item;
                return <Route key={path} path={path} component={component}/>
            })}
          </Switch>
        </div>
      </div>
    )
  }
}

export default Index

aaa/bbb/ccc .jsx 这里是内嵌组件

	export default aaa/bbb/ccc = () =>{
		return	<div>aaaaaaaaaa</div>
		// return	<div>bbbbbbbbbbbb</div>
		// return	<div>cccccccccccc</div>
	}

参考链接:vue-router 命名视图:https://router.vuejs.org/zh/guide/essentials/named-views.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值