2016-11-03 5 views
1

React Routerを使用して現在のURLのパス名を取得する最も効率的な方法は(browserHistoryを使用しています)さまざまな情報源には不一致があるようです。以下は私のプロバイダとルートの抜粋です:React Router w/browserHistoryで現在のルートのパス名を取得しています

ReactDOM.render(
     <Provider store={Store}> 
      <Router history={browserHistory}> 
       <Route path="/tools/customer-lookup" component={CustomerLookupApp} /> 
       <Route path="/tools/customer-lookup/profile/:id" component={CustomerLookupProfileWrapper} /> 
       <Route path="/tools/customer-lookup/profile/:id/store/:storeid" component={CustomerLookupStoreProfileWrapper} /> 
       <Route path="/tools/customer-lookup/profile/:id/store/:storeid/transaction/:transid" component={CustomerLookupStoreItemsWrapper} /> 
      </Router> 
     </Provider>, 
     document.getElementById('customer-lookup-main')); 
}); 

は、さまざまなコンポーネントでthis.props.location.pathnameをログに記録しようとしましたが、常に未定義アップします。 this.contextと同じこと。

アドバイスありがとうございます。

+0

ルートのパスが少し冗長であることを除いて、コードは正しいようです。子ルートを使用して 'path'の長さを減らすことができます。 debugging.red –

+0

@JasonXuの完全なコードを投稿することができます。ただし、子ルートに移動するときに、あるコンポーネントを別のコンポーネントに入れ子にするのを避けるようにしています。むしろルート(私は彼らがひどく冗長に見えることに同意する)は、単一ページアプリケーションの全く異なるビューにリンクしており、必ずしも親コンポーネントを再利用しているわけではありません。 **その**を達成するためのより良い方法があり、まだルートを巣立たせているなら、それについて聞きたいです。 – Jose

答えて

0

プロパティ「this.props.location.pathname」は、「さまざまな」コンポーネントでは使用できません。ルートハンドリングコンポーネントでのみ使用できます。すなわちCustomerLookupApp,CustomerLookupProfileWrapper,CustomerLookupStoreProfileWrapper,CustomerLookupStoreItemsWrapper

ツリーの下にパス名が必要な場合は、それを小道具として渡すことができます。

+0

私はまだそれを渡すことができますか? '' 'this'に' undefined'があります。 – Jose

関連する問題