react-router 4的多层嵌套路由 子路由不实现

发布于 2022-09-07 21:30:43 字数 1149 浏览 13 评论 0

一开始想实现一个路由嵌套,在主路由上(App)没有问题,可以实现;
之后在子路由上想做一个路由嵌套,<Route />却没有显示;


const App = () => (
     <Switch>
      <Route exact path="/" component={Index}/>
      <Route strict exact path="/user" component={User} />
      <Route strict exact path="/user/details" component={Details} />
     </Switch>
               
)
export default App   
class Details extends Component{   

    componentWillMount(){
        console.log('details')
      }

    render(){

        return (
            <div>
                <ul>
                    <li><Link to="/user/details/msg">click msg</Link></li>
                    <li><Link to="/user/details/abt">cliock abt</Link></li>
                </ul>
                <Route path="/user/details/msg" component={Msg} />
                <Route path="/user/details/abt" component={Abt} />
            </div>
        )
    }
}

export default Details;   

点击<li>的时候 总会调到一个新的路由里面 不知道为什么<Route />没有渲染;

希望各位前辈指点一下 谢谢你们;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

谈场末日恋爱 2022-09-14 21:30:43

。。。。。。。。。。使用嵌套路由在父级不能用exact, 因为当你匹配路由时路径加了子路由,导致父级路由路径不匹配从而父子组件都显示不了。例如你这个/user/details 使用了exact,当路径变为/user/details/msg是匹配不到/user/details的,这样的话就无法渲染Details而msg又是在Detail里面所以也不会渲染

雄赳赳气昂昂 2022-09-14 21:30:43

<Route strict exact path="/user/details" component={Details} />
把其中的exact去掉试试。
我遇到类似的问题,就是这么解决的。

陈独秀 2022-09-14 21:30:43

switch是单一的 建议把Route放在一起 其他地方用Link或者this.props.history.push()跳转 Route加上exact 表示完全匹配

寄风 2022-09-14 21:30:43

跳转到 /user/details/msg 的时候
<Route strict exact path="/user/details" component={Details} />
不能匹配Details了 那Details里的子组件自然不能渲染了啊
<Route strict exact path="/user" component={User} />
<Route strict exact path="/user/details" component={Details} />
这两个组件是平行的关系 为什么路由设置成嵌套了呢 有点奇怪啊
类似这样试试

const Index=()=>(<div>index</div>);
    const User=()=>(<div>user</div>);
    const Msg=()=>(<div>msg</div>);
    const Abt=()=>(<div>abt</div>);
    const Details=()=>(
            <div>
                <ul>
                    <li><Link to="/details/msg">click msg</Link></li>
                    <li><Link to="/details/abt">cliock abt</Link></li>
                </ul>
                <Route path="/details/msg" component={Msg} />
                <Route path="/details/abt" component={Abt} />
            </div>
    )
    const App = () => (
        <HashRouter>
            <Switch>
                <Route exact path="/" component={Index}/>
                <Route strict exact path="/user" component={User} />
                <Route path="/details" component={Details} />
            </Switch>
        </HashRouter>
    )
老子叫无熙 2022-09-14 21:30:43

可以用react-router-pro啊,像用vue一样使用router,https://github.com/aiyuekuang...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文