2017-10-20 18 views
0

私は、1つの中心的な場所ではなく、アプリケーション全体にルーティングを広げるというリアクションルータの4つの考え方を受け入れようとしています。 >簡潔にするために、< のAppは効果的に次のように吐き出す)(をレンダリング:リアクタ・ルータ・コンポーネントは自身の子をレンダリングできませんか?

<BrowserRouter> 
    <Link to='/' /> 
    <Link to='/linkb' /> 
    <Switch> 
     <Route exact path='/' component={ComponentA}> 
     <Route exact path='/linkb' component={ComponentB> 
    </Switch> 
</BrowserRouter> 

... これまでのところは良い:ナビゲーションリンクは対応する成分Aにルーティングするために私を助け、 Bと私の2ページアプリは正常に動作します。

問題は、コンポーネントB内で、独自の子ルートを使用したいということです。これらのルートは<App/>の「孫」になりますが、<App/>がそれらについて知っているか気にする必要はありません。私はリンクCまたはリンクDをクリックすると、

成分B

import React, { Component } from "react"; 
import { BrowserRouter, Switch, Route, Link } from 'react-router-dom'; 
import ComponentC from './ComponentC'; 
import ComponentD from './ComponentD'; 

export default class ComponentB extends Component { 
    constructor(props) { super(props);} 
    render() { 
    return (
     <div> 
     <div> 
      <Link to='/linkb/c' className='btn'>link C</Link> 
      <Link to='/linkb/d' className='btn'>link D</Link> 
     </div> 
     {this.props.children} 
     <Switch> 
      <Route exact path="linkb/c" component={ComponentC}/> 
      <Route exact path="linkb/d" component={ComponentD}/> 
     </Switch> 
     </div> 
    ); 
    } 
} 

ブラウザバーのURLの更新が、何も変わりません:私はこれを(主にわかりやすくするためにリッピング周囲のコンテンツやCSSのもの)に構築しました新しいコンポーネントはレンダリングされません。私は間違って何をしていますか?

+1

routeコンポーネントでexactを指定したため、 'path ="/linkb/c "'を実行した場合はどうなりますか? – Win

+0

その時点でURLは何を言いますか? –

+0

@AlexGuerraブラウザのURLが正しく更新されます(例:http:// localhost:3000/linkb/c')。ページ自体は変更されず、新しいコンポーネントはレンダリングされません。私はちょうどそのページが空ではないことに気づいた、私は私のQを更新する必要があります – yen

答えて

0

OK - 私がこれを動作させる唯一の方法は、自分の子コンポーネントのパスをハードコーディングするのをやめ、反応ルータ経由で渡されたパスセグメントを使用することです。これらは同じことを評価しているので(私は思うが)、これが私の問題を解決する理由は不明だが、それは問題ではない。理由は分かりません!誰かが私の答えではなく私の答えを受け入れる理由を説明できたら。

更新:絶対URLか相対URLかのようです。そのような混乱を避けるためにprops.match.pathを使用してください。

関連する問題