【问题标题】:How to handle onclicks on hyperlinks most gracefully如何最优雅地处理超链接上的点击
【发布时间】:2016-08-23 07:56:42
【问题描述】:

我想要的是看起来像 <a href="/page/my-cool-slug">My cool Slug</a> 的呈现 HTML。

这意味着某人可以右键单击该链接并在新选项卡中打开。这将绕过 react-router 提供的花哨的 pushState 东西。

但是,如果有人经常点击,我需要更新 redux 以说明新的 slug 是什么(或分页页面或其他)并致电 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>

另外,我尝试在事件处理程序中使用event.target 来获取a.href 属性,但是因为&lt;a&gt; 标记包含&lt;span&gt; 元素,所以event.target 是我在内部单击的&lt;span&gt; 标记&lt;a&gt; 元素。

【问题讨论】:

  • 我从 react-router 发现了Link,但这并不能处理新操作的调度。
  • 你应该从组件调用一个动作。让链接处理路由

标签: reactjs react-router redux react-router-redux


【解决方案1】:
  1. 您可以使用 react_router 中的&lt;Link /&gt; 并确定 onEnter/etc。 &lt;Route /&gt;&lt;Router /&gt;)中的操作。
  2. 你也可以换行 你的&lt;a&gt;&lt;span&gt; 中添加一些属性并处理 点击事件。
  3. 您也可以将display: block 样式添加到&lt;a&gt; => 它 不应该由&lt;span&gt; 包装

【讨论】:

  • 我曾经使用组件的componentDidMount 来获取路由参数并更新redux store。现在它按预期工作,但我的根 index.js 变得更加复杂,因为它需要导入特定应用的操作函数。
猜你喜欢
  • 2015-03-05
  • 2011-01-09
  • 1970-01-01
  • 2013-10-17
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
相关资源
最近更新 更多