2

は:<Route>コンポーネントの外にルートパラメータを公開する方法はありますか?私はこのような何かを持っている場合

<ConnectedRouter history={history}> 
    <App /> 
</ConnectedRouter> 

マイルートの設定は、次のようになります。

アプリのようなルートや他のコンポーネントの単なるラッパーである
export default [{ 
    path: '/', 
    exact: true, 
    main: Home 
}, 
{ 
    path: '/:someId', 
    exact: true, 
    main: Profile 
}, 
{ 
    path: '*', 
    main: NotFound 
}]; 

class App extends Component { 
render() { 
return (
    <div> 
    <Header /> 
    <Switch> 
     {routes.map((route, i) => <Route exact key={i} component={route.main} path={route.path}/>)} 
    </Switch> 
    <AnotherComponent {...this.props} /> 
    </div> 
); 
} 
} 

AnotherComponentがmatch.paramsを使用する方法やそれらを公開する方法はありますか?私はすでに一致していないパスをルートとしてそれを追加することもwithRouterでコンポーネントをラップしてみましよう:

<Route component={AnotherComponent} /> 

そしてルートがあるときに/:それは両方のプロファイルとAnotherComponentが、試合をレンダリングしsomeId。 AnotherComponentのparamsは空です:/。

これは可能ですか? ありがとう!

答えて

0

リアクションルータは、ルートにパスがある場合のみ、パラメータを返します。最上位レベルからパラメータを渡すことができます。そのコンポーネントをその内部にレンダリングします。 paramsにアクセスできます。あなたはそれが実際にそのPARAMを取得したい場合は

<Route path="/:someId" component={AnotherComponent} /> 

:他の時間として、あなたがやってする必要があります!

Routeコンポーネントの下の子のみがパラメータにアクセスできます。そのルート内のコンポーネントだけがそのパラメータを必要とするような方法でアプリケーションを構築する必要があります。

+1

私はこのコンポーネントが常に存在する必要があるということを理解しています。最初は「非表示」ですが、/:someIdにナビゲートするときには、このIDの情報で初期化してから、ルートが変更されてもアプリ全体にアクティブに表示する必要があります。 – gl0gl0

+0

最後に疑問符を付けてレンダリングします:) ' 'それはそのidの有無にかかわらずレンダリングされます! – zackify

+0

パーフェクト!ありがとうございました! – gl0gl0

関連する問題