它可能有风险,但至少在撰写本文时似乎有效,我们正在生产中使用它。
这是 ES6 和 React,我已经测试并发现它适用于以下浏览器。一个好处是如果有一个例外(在制作这个过程中有几个),它会像普通<a>
链接一样进入链接,但它不会是 SPA 然后是 ofc。
桌面:
- 铬 v.76.0.3809.132
- Safari v.12.1.2
- 火狐量子 v.69.0.1
- 边缘 18
- 边缘 17
- IE11
手机/平板电脑:
- Android v.8 三星互联网
- 安卓 v.8 铬
- Android v.9 铬
- iOS11.4 Safari
- iOS12.1 Safari
.
import 'mdn-polyfills/MouseEvent'; // for IE11
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
class ProductListLink extends Component {
constructor(props) {
super(props);
this.realClick = true;
this.onProductClick = this.onProductClick.bind(this);
}
onProductClick = (e) => {
const { target, nativeEvent } = e;
const clonedNativeEvent = new MouseEvent('click', nativeEvent);
if (!this.realClick) {
this.realClick = true;
return;
}
e.preventDefault();
e.stopPropagation();
// @todo what you want before the link is acted on here
this.realClick = false;
target.dispatchEvent(clonedNativeEvent);
};
render() {
<Link
onClick={(e => this.onProductClick(e))}
>
Lorem
</Link>
}
}