【发布时间】:2019-11-01 10:34:55
【问题描述】:
我正在使用 React JS 路由并安装了react-route-dom。我有两个主要组件,side-bar.js 和 nav.js。 side-bar.js 有一些组件,如 discussion.js、friends.js 等,应根据提供的 URL/指定路径加载。
我已经在side-bar.js 和<Links to="/path" /> 中指定了路由nav.js。当我单击nav.js 上的链接时,它会更改指定的路径(URL 已更改)但路径仍然相同(显示相同的组件),因为它应该在discussion.js、friends.js 等之间切换。但另一方面,当我用<Link to="/discussion"/> 中的指定路径刷新页面时,会相应地加载所需的组件。我不知道问题是什么,它只适用于页面刷新而不适用于链接。
side-bar.js代码
import React, { Component } from 'react'
import Discussion from './side-bar-components/discussion'
import Friends from './side-bar-components/friends'
import Notifications from './side-bar-components/notifications'
import Settings from './side-bar-components/settings'
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
export class sidebar extends Component {
constructor(props) {
super(props)
this.state = {
}
}
render() {
return (
<div className="sidebar">
<div className="container">
<div className="tab-content">
<Router>
<Switch>
<Route path={'/'} exact component={Discussion}/>
<Route path={'/discussion'} component={Discussion}/>
<Route path={'/friends'} component={Friends}/>
<Route path={'/notifications'} component={Notifications}/>
<Route path={'/settings'} component={Settings}/>
</Switch>
</Router>
</div>
</div>
</div>
)
}
}
export default sidebar
nav.js代码
import React, { Component } from 'react'
import {Link, BrowserRouter} from 'react-router-dom';
export class nav extends Component {
render() {
return (
<nav className="navigation">
<div className="container">
<a href="#nav" className="logo" rel="home"> <img src="dist/img/logo.png" alt="logo" /> </a>
<ul className="nav" role="tablist">
<BrowserRouter>
<li>
<Link to="/discussion">
<i data-eva="message-square" data-eva-animation="pulse"></i>
</Link>
</li>
<li>
<Link to="/friends">
<i data-eva="people" data-eva-animation="pulse"></i>
</Link>
</li>
<li>
<Link to="/notifications">
<i data-eva="bell" data-eva-animation="pulse"></i>
</Link>
</li>
<li>
<Link to="/settings">
<i data-eva="settings" data-eva-animation="pulse"></i>
</Link>
</li>
<li><button type="button" className="btn mode"><i data-eva="bulb" data-eva-animation="pulse"></i></button></li>
<li><button type="button" className="btn"><img src="dist/img/avatars/avatar-male-1.jpg" alt="avatar" /><i data-eva="radio-button-on"></i></button></li>
</BrowserRouter>
</ul>
</div>
</nav>
)
}
}
export default nav
home.js 代码(父组件)
import React, { Component } from 'react';
import Nav from './app-components/nav'
import Sidebar from './app-components/sidebar'
import Compose from './app-components/compose'
import Chat from './app-components/chat'
export class home extends Component {
constructor(props) {
super(props)
this.state = {
}
}
render() {
return (
<div className="layout">
<Nav />
<Sidebar />
<Chat />
<Compose />
</div>
)
}
}
export default home
【问题讨论】:
-
能否请您包含两个组件的父组件
-
你不应该用另一个 BrowserRouter 包裹你的 nav.js,这个组件在我们的结构中应该是唯一的。可能你在某个地方弄乱了这个结构,你需要把所有东西都包装在(相同的)BrowserRouter 中,包括你的路由和链接。
-
@AsafAviv 更新
-
@RenanSouza,当我没有通过错误将
<Link />与<Router />包装起来时。 -
那么您需要弄清楚为什么会发生这种情况并了解路由结构。检查文档并遵循它们,它非常简单而且更好,而且,您将真正了解您在做什么。 reacttraining.com/react-router/web/guides/quick-start
标签: reactjs react-router react-router-dom