2016-10-20 5 views
1

React Routerを実装して、テーブル行をクリックするたびに検索結果の表を別のProfileコンポーネントにリンクします(各行はユーザー/顧客)。 Linkでテーブルを書式設定しようとすると悪夢的なので、各テーブル行のonClickハンドラ内でbrowserHistory.push()を使用しています。ルータがテーブル行からbrowserHistoryにパラメータを渡す

問題:クリックした一意の行に基づいてプロファイルをレンダリングする必要があります。browserHistoryにパラメータを渡してみました。コンポーネントが見つからないか、または/tools/customer-lookup/profileを訪問しただけです。

EDIT:

<Provider store={Store}> 
    <Router history={browserHistory}> 
     <Route path="/tools/customer-lookup" component={CustomerLookupApp} /> 
     <Route path="/tools/customer-lookup/profile/:id" component={CustomerProfile} /> 
    </Router> 
</Provider> 

表の行::(browserHistory.push()に渡される{ id }なし)

constructor(props) { 
    super(props); 

    this.pushToUrl = this.pushToUrl.bind(this); 
    this.state = { 
    selectedRow: [] 
    }; 
}; 

render() { 
    let tableData = this.props.data.map(customer => { 
     return (
     <tr onClick={this.pushToUrl(`/tools/customer-lookup/profile/${customer.address}`)} id="customer-data-row"> 
      <td>{customer.firstname}</td> 
      <td>{customer.lastname}</td> 
      <td>{customer.birthdate}</td> 
      <td>{customer.city}</td> 
      <td>{customer.state}</td> 
      <td>{customer.address}</td> 
     </tr> 
    ); 
    }); 

pushToUrl(url) { 
    console.log(url); 
    } 
その後、browserHistory.push()

ルータセットアップを呼び出すハンドラ関数を追加して更新しました

tronClickハンドラが表示されますデータの行ごとに1回呼び出されることになり、ゼロになります。ここでonClickからのハンドラのconsole.logsです:

enter image description here

+0

お客様のには、プッシュURLにお客様のIDを入力するのはなぜですか? –

+0

数千人のユーザーのためのすべての一意のプロファイルURLを訪問しようとしたので、ちょうど私のブラウザがクラッシュしました。(つまり、 ... – Jose

+0

謝罪します。これを変更して、URLをクリックしたときに実行される関数に渡すハンドラがあるようにします。私は例を投稿します –

答えて

2

あなたはこれらの線に沿って何かを行うことができます。ナビゲートしようとするURLを渡します。

goTo(url) { 
    browserHistory.push(url) 
} 

render() { 
    let tableData = this.props.data.map(customer => { 
     return (
     <tr onClick={this.goTo.bind(this, `/tools/customer-lookup/profile/${customer.id}`)} id="customer-data-row"> 
      <td>{customer.firstname}</td> 
      <td>{customer.lastname}</td> 
      <td>{customer.birthdate}</td> 
      <td>{customer.city}</td> 
      <td>{customer.state}</td> 
      <td>{customer.address}</td> 
     </tr> 
    ); 
    }); 
+0

運がよろしいですが、まだブラウザがクラッシュしています。これは興味深いことです。テーブル行がクリックされたときではなく、 'browserHistory'がページ読み込み時に呼び出されているかのようなものです。私はなぜそれができたのかの兆候は見えません。 – Jose

+0

うーん、それは奇妙です。私はhashHistoryで試してみたところ、うまくいきました。したがって、browserHistory.push()をメソッドに移動しても、まだ実行されていますか?あなたのコードは今どのように見えますか? –

+0

はい。これは、テーブルのレンダリング時に 'onClick'ハンドラが設定されているかのようです。私は 'browserHistory'メソッドをconsole.logに置き換えました。私は画像を投稿します。 – Jose

関連する問題