React useOnWindowScroll 钩子

ReactReactBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探索如何在 React 中使用 useOnWindowScroll 钩子,以便在窗口滚动时执行回调。这个钩子使我们能够向 Window 全局对象添加一个滚动监听器,并在组件卸载时将其移除。通过使用这个钩子,我们可以轻松地为 React 组件添加自定义滚动行为。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StylingGroup(["Styling"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StylingGroup -.-> react/css_in_react("CSS in React") subgraph Lab Skills react/jsx -.-> lab-38401{{"React useOnWindowScroll 钩子"}} react/hooks -.-> lab-38401{{"React useOnWindowScroll 钩子"}} react/css_in_react -.-> lab-38401{{"React useOnWindowScroll 钩子"}} end

React useOnWindowScroll 钩子

虚拟机中已提供 index.htmlscript.js。一般来说,你只需在 script.jsstyle.css 中添加代码。

此函数会在每次窗口滚动时执行一个回调函数。要实现它:

  1. 使用 useRef() 钩子创建一个引用变量 listener
  2. 使用 useEffect() 钩子和 EventTarget.addEventListener() 监听 Window 对象的 'scroll' 事件,并将监听器引用赋值给 listener.current
  3. 当组件卸载时,使用 EventTarget.removeEventListener() 移除任何现有的监听器。

以下是代码:

const useOnWindowScroll = (callback) => {
  const listener = React.useRef(null);

  React.useEffect(() => {
    if (listener.current) {
      window.removeEventListener("scroll", listener.current);
    }
    listener.current = () => {
      callback(window.pageYOffset);
    };
    window.addEventListener("scroll", listener.current);
    return () => {
      window.removeEventListener("scroll", listener.current);
    };
  }, [callback]);
};

要测试此函数,你可以在组件中这样使用它:

const App = () => {
  useOnWindowScroll((scrollY) => console.log(`scroll Y: ${scrollY}`));
  return <p style={{ height: "300vh" }}>Scroll and check the console</p>;
};

ReactDOM.render(<App />, document.getElementById("root"));

这将在每次窗口滚动时记录窗口的垂直滚动位置。

请点击右下角的“Go Live”以在端口 8080 上运行网络服务。然后,你可以刷新“Web 8080”标签页来预览网页。

总结

恭喜你!你已经完成了 React useOnWindowScroll 钩子实验。你可以在 LabEx 中练习更多实验来提升你的技能。