2016-04-28 7 views
1

私が欲しいのは、このような外観のHTMLです。<a href="/page/my-cool-slug">My cool Slug</a>ハイクリンクでonclicksを最もうまく扱う方法

つまり、誰かがリンクを右クリックして新しいタブで開くことができます。それは反応ルータが提供する素晴らしいpushStateをバイパスします。

しかし、誰かが定期的にクリックすると、reduxを更新して、新しいスラッグ(またはページングページなど)と、browserHistory.push(...)とを呼び出す必要があります。

便利な簡単な方法が必要です。すべての混乱なしにこれのほとんどを行う何か。ここに私のアプリケーションは次のようになります。

// imports 
import { browserHistory } from 'react-router' 
import changeSlug from './actions' 

// the function 
makeURL(thing) { 
    return `/page/${thing.slug}` 
} 

// this click method 
handleClick(event, thing) { 
    event.preventDefault() 
    this.props.dispatch(changeSlug(thing.slug)) 
    browserHistory.push(`/page/${thing.slug}`) 
} 

// the JSX 
<a href={makeURL(myobject)} 
    onClick={(event) => handleClick(event, myobject)} 
>Go to {myobject.title}</a> 

また、私はa.href属性を取得するイベントハンドラでevent.targetを使用してみましたが、<a>タグが<span>要素が含まれているため、その後、event.targetは私が<a>内でクリックした<span>タグです素子。

+0

によって私が反応し、ルータから 'Link'を発見したが、それは新しいアクションの発送を処理しません。 –

+0

コンポーネントからアクションを呼び出す必要があります。リンクがルーティングを処理するようにしましょう –

答えて

0
  1. react_routerの<Link />を使用して、onEnter/etcを判別できます。 <Route />の アクション(<Router />)。
  2. <a><span>にラップし、いくつかの属性を追加して clickイベントを処理することもできます。
  3. また、あなたが<a>display: blockスタイルを追加することができます=>それ いけないラップ<span>
+0

私は、コンポーネントの 'componentDidMount'を使ってルートparamsを取得し、reduxストアを更新しました。今は期待通りに機能しますが、特定のアプリのアクション関数をインポートする必要があるため、私のルートindex.jsはもっと複雑になりました。 –

関連する問題