2017-06-21 23 views
0

私はオンラインのリアクションチュートリアルに従っています。このチュートリアルでは、React Router 3をReact Router(とreact-router-dom)をダウンロードしたときに使用していました。チュートリアルのコードは次のようになります。リアクションルータを入れ子にしたコンポーネント

import React from "react"; 
import {render} from "react-dom"; 
import {Router, Route, browserHistory} from 'react-router' 

import {Root} from "./components/Root"; 
import {Home} from "./components/Home"; 
import {User} from "./components/User"; 

class App extends React.Component { 
    render() { 
     return (
      <Router history={browserHistory}> 
       <Route path={"/"} component={Root}> 
        <Route path={"user"} component={User}/> 
        <Route path={"home"} component={Home}/> 
       </Route> 
      </Router> 
     ); 
    } 
} 

render(<App />, window.document.getElementById('app')); 

私はこのようなルータ4に反応して動作するようにコードを書き換えるしようとしている:

import React from "react"; 
import {render} from "react-dom"; 
import {Switch, BrowserRouter, Route} from 'react-router-dom' 

import {Root} from "./components/Root"; 
import {Home} from "./components/Home"; 
import {User} from "./components/User"; 

class App extends React.Component { 
    render() { 
     return (
      <BrowserRouter> 
       <Switch> 
        <Route path="/" component={Root}> 
         <Route path="/user" component={User}/> 
         <Route path="/home" component={Home}/> 
        </Route> 
       </Switch> 
      </BrowserRouter> 
     ); 
    } 
} 

render(<App />, window.document.getElementById('app')); 

これは私にエラーを与える:

Warning: You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored 

私はラップ試してみました子コンポーネントは<Switch><Root>となりましたが、動作しませんでした。どのように子コンポーネントをラップする必要がありますか?

答えて

2

リアクタ・ルータ4では、ルートをもう一度ネストしません。あなたのケースでは何を行うことができ、このように、あなたの子コンポーネントであなたのルートを置くことです:

class App extends React.Component { 
    render() { 
     return (
      <BrowserRouter> 
       <Route path="/" component={Root} /> 
      </BrowserRouter> 
     ); 
    } 
} 

class Root extends React.Component { 
    render() { 
     return (
      <div> 
       <Route path="/user" component={User}/> 
       <Route path="/home" component={Home}/> 
      </div> 
     ); 
    } 
} 

それが唯一の最初の子のルートと一致しますよう。また、私は、あなたがここにSwitchを使用する必要はないと思いますそれはあなたの場合に必要ではないようです。

+0

申し訳ありませんが、このコードでは "/"パスよりもnothignをレンダリングできません。同じコンポーネント(デバッグ用)を使用しても、ブラウザに「見つからない」文字列が表示されます。 –

+0

これは、ルートをネストする一般的な例です。 "/"、 "/ user"などのような最初のレベルのルートがあれば、このようなルートを定義する必要はありません。しかし、 "/ user/create"のようなネストされたルートを開始する場合は、この例を使用できます。 – Shota

関連する問題