React <a> onClick 处理程序被忽略 - Google 分析
React <a> onClick handler is ignored - Google analytics
我对 React onClick 处理程序有疑问。尽管 e.preventDefaul()
,这个 link 有时会触发完全重新加载。我有这个代码:
<a
href={isInactive ? undefined : item.url}
onClick={(e) => {
e.preventDefault();
return !isInactive ? this.props.onChange(item) : undefined;
}}
>
Foo
</a>
这个错误与 GTM 有某种联系,因为当我评论 GTM 脚本标签时一切正常。接下来的事情是,当我停止为 Chrome (https://chrome.google.com/webstore/detail/datalayer-checker/ffljdddodmkedhkcjhpmdajhjdbkogke) 使用数据层扩展时,一切也都正常。
您知道出现此问题的任何可能原因吗?
问题可能是由于来自您的点击处理程序的 return 值引起的。如果您不明确停止传播,点击事件将冒泡到所有父元素。如果您希望点击事件不传播到您的处理程序之外,您需要在您的点击处理函数中调用 e.stopPropagation()
或 return false
。如果您不阻止 click 事件传播,定位元素将导航到 href
属性中指定的 URL,这将导致整个页面重新加载。
Here's an article that explains pretty concisely the difference between e.preventDefault()
and return false
. It also links to this article 更详细地解释了事件的处理方式。
我对 React onClick 处理程序有疑问。尽管 e.preventDefaul()
,这个 link 有时会触发完全重新加载。我有这个代码:
<a
href={isInactive ? undefined : item.url}
onClick={(e) => {
e.preventDefault();
return !isInactive ? this.props.onChange(item) : undefined;
}}
>
Foo
</a>
这个错误与 GTM 有某种联系,因为当我评论 GTM 脚本标签时一切正常。接下来的事情是,当我停止为 Chrome (https://chrome.google.com/webstore/detail/datalayer-checker/ffljdddodmkedhkcjhpmdajhjdbkogke) 使用数据层扩展时,一切也都正常。
您知道出现此问题的任何可能原因吗?
问题可能是由于来自您的点击处理程序的 return 值引起的。如果您不明确停止传播,点击事件将冒泡到所有父元素。如果您希望点击事件不传播到您的处理程序之外,您需要在您的点击处理函数中调用 e.stopPropagation()
或 return false
。如果您不阻止 click 事件传播,定位元素将导航到 href
属性中指定的 URL,这将导致整个页面重新加载。
Here's an article that explains pretty concisely the difference between e.preventDefault()
and return false
. It also links to this article 更详细地解释了事件的处理方式。