2017-01-14 14 views
0

私のアプリケーションにURLパスを使用したいと思います。私はreact-routerを使用してみましたが、私は子コンポーネントに小道具を送信する方法を理解していないルータ内のコンポーネントに小道具を渡す

render() { 
    return (
    <Main 
     isLoggedIn={this.state.isLoggedIn} 
     user={this.state.user} 
     ... /> 
) 
} 

(小道具は、変数や関数の集まりです)

:現在、私はちょうどapp.jsMainコンポーネントをレンダリング。

<Router history={browserHistory} > 
    <Route path='/' component={Main} 
    ... where to send props? /> 
    <Route path='join' component={Join} 
    ... props /> 
</Router> 

問題は、私は(app.jsで)私のAppコンポーネントのいくつかの状態変数がMainJoinの両方で利用可能にする必要があるということです。どのようにルータでそれを達成するのですか?

アプリケーション構造:

App 
- Join 
- Main 
    - ... 

答えて

0

です。 Reduxを使用する場合は、ルータでプロップを渡す必要はありません。接続を使用して任意のコンポーネントで簡単にアクセスできますが、反応を使用しない場合は、Reduxルータの階層機能を使用できます。

あなたがパスにアクセスするときに、この

<route path="/student" component={studentHome}> 
    <route path="/class" component={classHome} /> 
</route> 

のようなルートに何かを持っている

/student/class 

は、ルータがclassHomeコンポーネントにStudentHomeとすることができます簡単なパス小道具の子としてclassHomeコンポーネントをロードします反応します。

あなたの学生のクラスRenderメソッドは、子供たちに小道具を渡すことについて

render(){ 
    const childrenWithProps = React.Children.map(this.props.children, 
    (child) => React.cloneElement(child, { 
     doSomething: this.doSomething 
    }) 
    ); 

    return <div> some student component functionality 
       <div> 
       {childrenWithProps} 
       </div> 
      </div> 
} 

詳細のようなものになります。 How to pass props to {this.props.children}

+0

MainとJoinの両方の上に私の状態を1レベル上に保つ必要がありますが、私はこのアプローチを使ってどのように動作するのか分かりません。 MainとJoinは異なるパスにありますが、同じ小道具にアクセスする必要があります。 – yberg

+0

私は実際に状態を1レベル下(Main)に移動し、Mainを残りのルート/コンポーネントのコンテナルートとして維持することで解決しました。ありがとう。 – yberg

0

あなたは、標準のURLパラメータを使用することができます。たとえば、IDを渡すには:

<Route path='join/:id' component={Join}/> 

あなたはbrowserHistoryを使用する必要があります:

browserHistory.push(`/join/${id}`); 

その後Jointhis.props.params.idを使用しています。

は、ここでは、あなたの状態を管理しているどのように依存し、より詳細な説明https://stackoverflow.com/a/32901866/48869

+0

は、私はいくつかの機能だけでなく、いくつかの変数を渡す必要があるので、私はしないでください残念ながらこのアプローチはうまくいくと思います。 – yberg

+0

その場合、あなたの質問を更新しておきたいもので更新してください。 – Eldelshell

関連する問題