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 的状态管理和生命周期功能。

相关推荐
king王一帅2 小时前
Incremark Solid 版本上线:Vue/React/Svelte/Solid 四大框架,统一体验
前端·javascript·人工智能
智航GIS7 小时前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具
前端工作日常7 小时前
我学习到的A2UI概念
前端
徐同保7 小时前
为什么修改 .gitignore 后还能提交
前端
一只小bit8 小时前
Qt 常用控件详解:按钮类 / 显示类 / 输入类属性、信号与实战示例
前端·c++·qt·gui
Mr -老鬼8 小时前
前端静态路由与动态路由:全维度总结与实践指南
前端
颜酱9 小时前
前端必备动态规划的10道经典题目
前端·后端·算法
wen__xvn9 小时前
代码随想录算法训练营DAY10第五章 栈与队列part01
java·前端·算法
大怪v10 小时前
前端佬们!!AI大势已来,未来的上限取决你的独特气质!恭请批阅!!
前端·程序员·ai编程
Mr -老鬼10 小时前
功能需求对前后端技术选型的横向建议
开发语言·前端·后端·前端框架