2017-06-19 13 views
0

私は、メイン、ナビ、タイマー、カウントダウンの4つのコンポーネントで小さな反応アプリを開発しています。私はそれを実行すると(新しいタブを開き、アプリケーションを読み込み、リフレッシュしないで)、このアプリケーションでメインコンポーネントとタイマーコンポーネントを同時にレンダリングするようにしますが、アプリケーションはメインコンポーネントのみをレンダリングし、Navコンポーネントのみを含む空白ページが表示されます。最初の実行時に2つのコンポーネントをレンダリングする

私はIndexRouteを使ってみましたが、私は奇妙なエラーがあり、それは私のためには機能しませんでした。

import React, {Component} from 'react'; 
import {NavLink} from 'react-router-dom'; 

class Nav extends Component { 

    render() { 
     return (
      <div className="top-bar"> 
       <div className="top-bar-left"> 
        <ul className="menu"> 
         <li className="menu-text">React Timer</li> 
         <li><NavLink to="/timer" activeClassName="active-link" activeStyle={{fontWeight: 'bold'}}>Timer</NavLink></li> 
         <li><NavLink to="/countdown" activeClassName="active-link" activeStyle={{fontWeight: 'bold'}}>Countdown</NavLink></li> 
        </ul> 
       </div> 
       <div className="top-bar-right"> 
        <ul className="menu"> 
         <li className="menu-text">Created by Milad Fattahi</li> 
        </ul> 
       </div> 
      </div> 
     ); 
    } 

} 

export default Nav; 

、他の2つのコンポーネントは、単純なテキスト要素が含まれています。

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import {BrowserRouter as Router, Route, IndexRoute, hashHistory} from 'react-router-dom'; 
import Main from 'Main'; 
import Timer from 'Timer'; 
import Countdown from 'Countdown'; 

ReactDOM.render(
    <Router history={hashHistory}> 
     <div> 
      <Route path="/" component={Main} /> 
      <Route exact path="/timer" component={Timer} /> 
      <Route path="/countdown" component={Countdown} /> 
     </div> 
    </Router>, 
    document.getElementById('app') 
); 

メインコンポーネント:

import React, {Component} from 'react'; 
import Nav from 'Nav'; 

class Main extends Component { 

    render() { 
     return (
      <Nav /> 
     ); 
    } 
} 

export default Main; 

ナビゲーションコンポーネント

は、ここに私のコードです。

+0

あなたにメインページを主成分と他のルートを作りたいですそれの子供?メイン内に他のルートコンポーネントをレンダリングすることを意味しますか? –

+0

はい、正確です。私が言ったように、私はアプリの最初の実行時にメインコンポーネントとタイマーコンポーネントの両方を表示したい。 –

答えて

0

IndexRouteおよびhashHistoryreact-router-domで利用できません。 Switchを使用して、最初に一致するルートのみをレンダリングします。これで、コンポーネント自体に子ルートを持つことができます。あなたは、Switchを使うそうでない場合は、最後のpath="/"でルートを持っているとき

はまた、それは初めでそれを一致し、あなたが主なコンポーネントの子であるためにあなたの時間コンポーネントを構成することができ、あなたの他のルート

をレンダリングしません。以下のような主要コンポーネントで次に

import {BrowserRouter as Router, Route} from 'react-router-dom'; 
ReactDOM.render(
    <Router> 
     <Switch> 
      <Route path="/" component={Main} /> 
     </Switch> 
    </Router>, 
    document.getElementById('app') 
); 

import React, {Component} from 'react'; 
import Nav from 'Nav'; 
import {Route, Redirect} from 'react-router-dom' 
class Main extends Component { 

    render() { 
     return (
      <div> 
      <Nav /> 
      <Redirect to="/timer" /> 
      <Route exact path="/timer" component={Timer} /> 
      <Route path="/countdown" component={Countdown} /> 
      </div> 
     ); 
    } 
} 

export default Main; 
+0

私はこれを試しましたが、問題があります。 Countdownコンポーネントに切り替えると、最初に実行されたときにレンダリングされたNavコンポーネントが表示されなくなります。 –

+0

ルータv4では、ルートをネストするために、コンポーネント自体にルートを指定する必要があるため、必要に応じてコードを更新しました –

+0

正常に動作します。ありがとう。 –

関連する問題