2017-03-28 1 views
1

this videoを見ると反応ルータは使いやすいようですが、divをクリックしてリンクしたいので<Link>をリンクしたいので、自分のコードでナビゲートする方法がわかりません。react-router-dom 4.0でコードをナビゲートしますか?

StackOverflowを検索しましたが、4.0で動作する回答が見つかりませんでした。 browserHistoryをインポートしようとするとthis questionから(前と「反応-ルータ」「を反応させ、ルータ-DOM」に加えて、インストールした後に)未定義与える:

import { browserHistory } from 'react-router'; 
console.log('browserHistory:', browserHistory); 

私も「文脈」はあなたができるがあることをどこかで見ました着くが、これは「文脈」「一致」の値を示していますがない:

<Route path="/" render={({ match, context}) => { 
    console.log('match:', match); 
    console.log('context:', context); 

編集

私は「ルータ」はHISTを持っていることを見ることができます開発ツールでoryプロパティを追加すると、私はそれを得ることができます:

<Route path="/" render={({ match, context, history}) => { 

ルート外からこれを得る方法はありますか?たとえば、他のコンポーネントにナビゲートするナビゲーションバーコンポーネントですが、ルート自体の中にはありません。

+0

自分の履歴を初期化してhistory.push https://www.npmjs.com/package/historyを呼び出し、この履歴を使用することも忘れました

答えて

2

ドキュメントをもっと読む必要がありました。 historyオブジェクトは、Routecomponent(またはその他の)属性を使用するプロパティとしてのみ渡されます。明らかに 'ヒストリ'パッケージを含めてcreateBrowserHistoryを使用してRouterに渡してから、Routeにコンポーネントを指定する必要があります。私はちょうど<Router><App/>を有しており、これらのプロパティへのアクセスを持っていなかったの前に

import { createBrowserHistory } from 'history'; 
const history = createBrowserHistory(); 
ReactDOM.render((
    <Router history={ history }> 
     <Route path="/" component={ App } /> 
    </Router> 
), 
    document.getElementById('root') 
); 

...これが指定されていないexactので、うまく動作するべきだと思います。

3

私はあなたの質問を理解していれば、これはプログラマチックにリンクする方法です。

class Test extends React.Component { 

     handleClick() { 
     console.log(this.context); 
     this.context.router.history.push('/some/path'); 
     }, 

     render() { 

     return (
      <div onClick={handleClick}> 
      This is div. 
      </div> 
     ) 
     } 
    } 

    Test.contextTypes = { 
     router: React.PropTypes.object.isRequired 
    } 

    ReactDOM.render(
     <Test />, 
     document.getElementById("app") 
    ); 
+0

「コンテキスト」はどこから来たのですか?私は、私の 'App'コンポーネントの反応開発ツールには表示されませんが、ログに記録するとコンソールに空のオブジェクトが表示されます。 –

+0

Hmmm ... 'this.context'は私のために定義されていません...コンポーネントは' 'か何かの中になければなりませんか? –

+0

@JasonGoemaat this.contextは、コンポーネントにcontextTypesを追加することによって設定されます: 'Test.contextTypes = { ルータ:React.PropTypes.object.isRequired }' – Meldon

関連する問題