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

相关推荐
初学小白...6 分钟前
HTML知识点
前端·javascript·html
鹏多多8 分钟前
flutter睡眠与冥想数据可视化神器:sleep_stage_chart插件全解析
android·前端·flutter
艾小码19 分钟前
Vue3 脚本革命:<script setup> 让你的代码简洁到飞起!
前端·javascript·vue.js
IT_陈寒34 分钟前
Python 3.12新特性解析:10个让你代码效率提升30%的实用技巧
前端·人工智能·后端
故厶1 小时前
webpack实战
前端·javascript·webpack
_果果然1 小时前
你真的懂递归吗?没那么复杂,但也没那么简单
前端·javascript
菜泡泡@2 小时前
仓库地图vue-grid-layout
前端·javascript·vue.js
u***u6854 小时前
React环境
前端·react.js·前端框架
X***E4634 小时前
前端数据分析应用
前端·数据挖掘·数据分析
4***14904 小时前
React社区
前端·react.js·前端框架