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

相关推荐
三小河3 分钟前
工作中的Ai工具汇总
前端
mapbar_front22 分钟前
react项目开发—关于代码架构/规范探讨
前端·react.js
二木一夕28 分钟前
Vue 3 的组合式 API和传统选项式 API区别(vue2转vue3,两者差异)
前端
LuckySusu30 分钟前
【vue篇】Vue 项目中的静态资源管理:assets vs static 终极指南
前端·vue.js
LuckySusu31 分钟前
【vue篇】Vue.delete vs delete:数组删除的“陷阱”与正确姿势
前端·vue.js
LuckySusu32 分钟前
【vue篇】Vue 模板编译原理:从 Template 到 DOM 的翻译官
前端·vue.js
小菜摸鱼35 分钟前
Node.js + vue3 大文件-切片上传全流程(视频文件)
前端·node.js
LuckySusu38 分钟前
【vue篇】Vue 2 响应式“盲区”破解:如何监听对象/数组属性变化
前端·vue.js
LuckySusu38 分钟前
【vue篇】Vue Mixin:可复用功能的“乐高积木”
前端·vue.js
洋不写bug1 小时前
前端环境搭建,保姆式教学
前端