さまざまなルーティング方法を試してみましたが、まだ運がありません。
ルート設定ファイル、つまりroute.jsがあります
const Root = ({ store }) => (
<Provider store={store}>
<BrowserRouter>
<div>
<Route path='/' component={ App }/>
</div>
</BrowserRouter>
</Provider>
)
今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>
);
}
}
私は常にアプリをロードしたいので、最高レベルに配置し、ヘッダーとサイドナブも常にロードされるようにして、アプリ内にあるようにします。
不明なパスおよび初回のロードの場合、/ home/dashboardにリダイレクトしました
私はそれが/に二度来なければならないことを理解しているので、この警告。
同じことを達成し、警告を解決するようにルーターを構成するにはどうすればよいですか。
どんな助けも大歓迎です。
問題を解決しました。これが解決策です。
<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={ App }/>
</div>
</BrowserRouter>
</Provider>
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>
);
}
}
ただし、制限があります。ユーザーが不明なパスを入力すると、'/home/dashboard'
にリダイレクトされません。つまり、デフォルトルートにリダイレクトされません。
その制限を克服するには、追加する必要があります:
<Switch>
{/*---- your additional routes goes here -----*/}
<Redirect to="/home/dashboard" />
</Switch>
上記のコードを、残りのルーティングを処理するコンポーネントに追加します。たとえば、私はSidenavコンポーネントに追加しました。
つかいます <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>
)
私も同じような問題に直面しました。 Route.Switchに正確に追加したときに解決されました。
<Switch>
<Route exact path='/' component={ App }/>
</Switch>
次のようにルートを設定すると思います
<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={ App }/>
</div>
</BrowserRouter>
</Provider>
および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} />}/>
<Switch>
<Route path='/home/dashboard' component={ Dashboard }/>
<Redirect to='/home/dashboard'/>
</Switch>
</div>
</div>
</div>
);
}
}
これと同じ問題が発生しました-リダイレクトしようとしていましたが、エラーが発生していたので、必要なのはスイッチだけです:
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Switch>
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
<Redirect to="/home/dashboard" />
</Switch>
</Route>