Arj*_*tra 11 reactjs react-router-v4
我得到这个错误尝试不同的路由方式仍然没有运气.
我有路由配置文件,即route.js
const Root = ({ store }) => (
<Provider store={store}>
<BrowserRouter>
<div>
<Route path='/' component={ App }/>
</div>
</BrowserRouter>
</Provider>
)
Run Code Online (Sandbox Code Playgroud)
现在在App.js
class AppComp extends Component {
render() {
const {match} = this.props;
let navClass = 'active';
if(this.props.sideClass === "nav-ssh") {
navClass = "active-ssh";
}
return (
<div>
<div className="container">
<div className="main">
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
<Redirect to="/home/dashboard" />s
</div>
</div>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
我想加载应用程序,所以把它放在最高级别,标题和sidenav也应该总是加载,所以他们在应用程序内.
对于任何未知路径和第一次加载,我重定向到/ home/dashboard
我明白它必须要/两次所以这个警告.
如何配置我的路由器以实现相同并解决警告.
任何帮助将不胜感激.
Utk*_*pta 20
使用<Switch>,而不是<div>包装路线,解决了我的问题.
import React from 'react'
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'
import { LoginScreen, LogoutScreen } from './components'
export default () => (
<div>
<Router>
<Switch>
<Route path='/login' component={LoginScreen}/>
<Route path='/logout' component={LogoutScreen}/>
<Route component={AuthenticatedRoutes}/>
</Switch>
</Router>
</div>
)
Run Code Online (Sandbox Code Playgroud)
我解决了这个问题。这是一个解决方案。
路由.js<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={ App }/>
</div>
</BrowserRouter>
</Provider>
Run Code Online (Sandbox Code Playgroud)
在 App.js 添加一个检查match.url === window.location.pathname,该检查对于初始渲染始终为 true,因此'/'重定向到'/home/dashboard'. 添加此条件可以解决重定向警告。
class AppComp extends Component {
render() {
const {match} = this.props;
let
shouldRedirect = match.url === window.location.pathname,
redirectTo = <Redirect to="/home/dashboard" />;
let navClass = 'active';
if(this.props.sideClass === "nav-ssh") {
navClass = "active-ssh";
}
return (
<div>
<div className="container">
<div className="main">
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
{shouldRedirect && redirectTo}
</div>
</div>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
但现在你会遇到一个限制,如果用户输入一些未知的路径,那么它不会重定向到'/home/dashboard'ie 到我们的默认路由。
要克服该限制,您必须添加:
<Switch>
{/*---- your additional routes goes here -----*/}
<Redirect to="/home/dashboard" />
</Switch>
Run Code Online (Sandbox Code Playgroud)
将上述代码添加到处理其余路由的组件中。例如,对我来说,我已添加到 Sidenav 组件。
| 归档时间: |
|
| 查看次数: |
22093 次 |
| 最近记录: |