我正在使用reactjs路由器中的Link组件,但无法使onClickevent运行。这是代码:
<Link to={this.props.myroute} onClick='hello()'>Here</Link>
这是做这件事的方式还是另一种方式?
Answers:
您应该使用此:
<Link to={this.props.myroute} onClick={hello}>Here</Link>
或(如果方法hello
位于此类上):
<Link to={this.props.myroute} onClick={this.hello}>Here</Link>
更新:对于ES6和最新版本,如果要使用click方法绑定某些参数,可以使用以下方法:
const someValue = 'some';
....
<Link to={this.props.myroute} onClick={() => hello(someValue)}>Here</Link>
<Link to="" onClick={this.delete}>Delete</Link>
。我希望“ to”在这里是可选的。
Link
不to
?如果不需要它,则只需添加其他组件(例如<button>
带有onClick
方法的),您就可以进行;)。
我不认为这是一般使用的好模式。链接将运行您的onClick事件,然后导航到该路线,因此导航到新路线会稍有延迟。更好的策略是使用“ to”道具导航到新路线,并在新组件的componentDidMount()函数中触发hello函数或任何其他函数。它会为您提供相同的结果,但路线之间的过渡要平滑得多。
对于上下文,我在使用链接上的onClick事件更新redux存储时注意到了这一点,就像在这里一样,这导致在安装新路由的组件之前造成〜.3秒的白屏延迟。没有涉及到api调用,所以我惊讶于延迟如此之大。但是,如果您只是控制台记录“ hello”,则延迟可能不会很明显。
onClick
在转换为新路由之前,我将其保存在cookie中。我不会在下一个组件中获得该回调URL,因此我需要在过渡本身之前进行此操作。您还有其他选择吗?PS:即使刷新后也应该可以访问回调URL,因此可以将其保存在存储区中。
onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });
如果您不使用反应导航I只会使用Link的onClick而不必担心性能问题。它可能不会引起注意。
this.hello.bind(this)