为子组件(useRef)反应滑轮事件?

Posted

技术标签:

【中文标题】为子组件(useRef)反应滑轮事件?【英文标题】:React slick-slider wheel Event for child components (useRef)? 【发布时间】:2020-02-12 12:54:23 【问题描述】:

我正在使用 React 滑动滑块。我想实现滚轮事件,所以当用户在触控板上滚动时,它会改变当前的幻灯片。 https://stackblitz.com/edit/react-slick-slider-issues 我使用useRef 来引用滑块,然后在事件侦听器回调中调用光滑函数。

当它只是一个子组件时很好,但是出于好奇,我在初始引用下方的父级中添加了相同的子级。两个滑块都调用了slickNextslickPrev。是因为我使用useRef 的方式,还是有什么方法可以只在用户在该滑块上时调用光滑的函数?

【问题讨论】:

【参考方案1】:

那是因为您正在收听window.addEventListener,这意味着无论用户滚动到哪里,两个滑块都会触发slickNextslickPrev

如果你想为每个 Slider 触发这些功能,你应该在组件的根目录上监听 scroll

useEffect(() => 
  if (!parentRef.current) 
    return;
  
  parentRef.current.addEventListener('wheel', (e)=>handleScroll(e));

  return (() => 
    parentRef.current.removeEventListener('wheel',(e)=>handleScroll(e));
  );
, [parentRef, rowData]);
<div ref=parentRef style= backgroundColor: "green", height: "140px" >
  ...
</div>

工作示例:https://stackblitz.com/edit/react-slick-slider-issues-xunhy3?file=ReactSlider.js

【讨论】:

以上是关于为子组件(useRef)反应滑轮事件?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法检查反应组件是不是已卸载?

我可以在 React js 中使用 useRef 挂钩而不是 onChange 事件来更新状态吗?

如何在 UseEffect 中将事件侦听器添加到 UseRefs

前端学习(3303):函数组件组件子组件useRef聚焦

React - UseState,UseRef..In Trouble

类组件中的 UseRef。画布未定义