React-自定义Hook与逻辑共享

#题引:我认为跟着官方文档学习不会走歪路

在 React 中,自定义 Hook 是一种复用逻辑的方式。自定义 Hook 是一个 JavaScript 函数,名称以 use 开头,可以调用其他的 Hook, 可以返回任意值。

创建自定义Hook

假设你正在开发一款重度依赖网络的应用(和大多数应用一样)。当用户使用应用时网络意外断开,你需要提醒他, 该网络状态验证需要在多个组件中使用。

需要两个东西:

一个追踪网络是否在线的 state。

一个订阅全局 online 和 offline 事件并更新上述 state 的 Effect。

function useOnlineStatus() {
  const [isOnline, setIsOnline] = useState(true);
  useEffect(() => {
    function handleOnline() {
      setIsOnline(true);
    }
    function handleOffline() {
      setIsOnline(false);
    }
    window.addEventListener('online', handleOnline);
    window.addEventListener('offline', handleOffline);
    return () => {
      window.removeEventListener('online', handleOnline);
      window.removeEventListener('offline', handleOffline);
    };
  }, []);
  return isOnline;
}

组件内部可以这样使用该Hook

const isOnline = useOnlineStatus();

自定义 Hook 共享的是状态逻辑,而不是状态本身,如果有多个组件使用了useOnlineStatus, state 变量 isOnline是各自独立的。每当组件重新渲染,自定义 Hook 中的代码就会重新运行。

如果一个自定义 Hook 不使用任何内置 Hook(如 useState、useEffect 等),那么它实际上就变成了一个普通的工具函数。这种情况比较少见,因为自定义 Hook 的价值在于它们能够利用 React 的状态管理和生命周期功能。

相关推荐
澄江静如练_1 小时前
vue3中的标签属性中的Ref
前端·javascript·vue.js
GIS好难学1 小时前
考研出分24小时,人类精神状态图鉴
前端·考研·gis·gis开发·webgis·地信
斯~内克1 小时前
React Router 完全指南:从基础到高级实践
前端·react.js·前端框架
IT、木易1 小时前
大白话React第八章React 深入进阶与实践拓展阶段
javascript·react.js·ecmascript
m0_748232391 小时前
qwenvl 以及qwenvl 2 模型架构理解
android·前端·后端
冲!!1 小时前
vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用
前端·javascript·vue.js
匹马夕阳1 小时前
React vs Vue3深度对比与使用场景分析
前端·react.js·前端框架
一路向前的月光1 小时前
React(11)路由demo
javascript·react.js·ecmascript
浪遏2 小时前
2025年2月凉面与热面(2)—— 还没开始就结束了🤡?
前端·面试
七灵微2 小时前
【前端】简单原生实例合集html,css,js
前端·css·html