如何在react链接组件上使用onClick事件?

bie*_*ier 52 reactjs react-router react-redux

我正在使用reactjs路由器的链接组件,我无法使onClickevent正常工作.这是代码:

<Link to={this.props.myroute} onClick='hello()'>Here</Link>
Run Code Online (Sandbox Code Playgroud)

这是通过这种方式或其他方式实现的吗?

Cod*_*Cat 89

hello()作为字符串传递,也hello()意味着hello立即执行.

尝试

onClick={hello}
Run Code Online (Sandbox Code Playgroud)


Vit*_*hyn 19

你应该用这个:

<Link to={this.props.myroute} onClick={hello}>Here</Link>
Run Code Online (Sandbox Code Playgroud)

或者(如果方法hello在这个类中):

<Link to={this.props.myroute} onClick={this.hello}>Here</Link>
Run Code Online (Sandbox Code Playgroud)

  • 链接“to”是必需的,但很多时候我只需要 onClick(),目前,我必须执行类似 `&lt;Link to="" onClick={this.delete}&gt;Delete&lt;/Link&gt;` 的操作。我希望“to”在这里是可选的。 (5认同)
  • 或者更好`this.hello.bind(this)` (4认同)
  • ^实际上,您应该始终将构造函数中的操作绑定为绑定您可能导致性能问题的方式. (4认同)
  • @newman 为什么你会在没有 `to` 的情况下使用 `Link`?如果您不需要它,那么只需一些其他组件,例如带有 `onClick` 方法的 `&lt;button&gt;`,您就可以开始使用了 ;)。 (4认同)

Nun*_*cks 14

我不相信这是一般使用的好模式.链接将运行您的onClick事件,然后导航到路线,因此导航到新路线会稍有延迟.更好的策略是使用'to'prop来导航到新路径,并且在新组件的componentDidMount()函数中,您可以激活hello函数或任何其他函数.它会给你相同的结果,但路线之间的转换更平滑.

对于上下文,我注意到这一点,同时在Link上使用onClick事件更新我的redux存储,就像你在这里一样,并且在安装新路由的组件之前导致了〜.3秒的空白屏幕延迟.没有涉及api电话,所以我很惊讶延迟是如此之大.但是,如果您只是控制台记录'hello',则延迟可能不明显.

  • 如果您使用react-navigation:我想说不要使用Link,只需使用TouchableOpacity或TouchableWithoutFeedback,然后在您的onPress函数中您可以导航并将您的url作为导航参数传递```onPress={() =&gt; { this.props.navigation.navigate('NameOfNextScreen', {callbackUrl: 'http://.callbackUrl.com', });``` 如果你不使用react-navigation,我只会使用Link的onClick,而不是不用担心轻微的性能问题。可能不会被注意到。 (2认同)

小智 5

 const onLinkClick = (e) => {
    e.preventDefault();
    ---do your stuff---
    history.push('/your-route');
};

<a href='/your-route' onClick={onLinkClick}> Navigate </a>
                   or
<Link to='/your-route' onClick={onLinkClick}> Navigate </Link>
Run Code Online (Sandbox Code Playgroud)