复杂业务场景架构与疑难实现(下)

加载中... 浏览

本篇文章继续探讨前端业务场景中的架构抽象,涵盖自定义 Hook 的封装策略、窗口响应式监听以及 URL 参数解析的工程化方案。

一、 逻辑复用:高度集成的自定义 Hook 封装

1. 通用异步请求 Hook (useRequest)

利用组合式 API 将加载状态(Loading)与数据同步逻辑封装,实现全站风格一致的请求管理:

javascript
function useRequest(apiFn) {
  const data = ref(null);
  const loading = ref(false);
  const run = async (...args) => {
    loading.value = true;
    try {
      data.value = await apiFn(...args);
    } finally {
      loading.value = false;
    }
  };
  return { data, loading, run };
}

二、 交互响应:窗口大小监听与自动销毁

2. 构建响应式布局 Hook (useWindowSize)

在大型 SPA 应用中,监听视口变化常用于触发图表重绘或调整侧边栏显隐状态:

javascript
function useWindowSize() {
  const size = reactive({ 
    width: window.innerWidth, 
    height: window.innerHeight 
  });
  const onResize = () => {
    size.width = window.innerWidth;
    size.height = window.innerHeight;
  };
  // 建立事件监听
  window.addEventListener('resize', onResize);
  // 在组件生命周期结束时注销监听器,防止内存泄漏
  onUnmounted(() => window.removeEventListener('resize', onResize));
  return size;
}

三、 数据解析:结构化参数处理

3. URL 查询参数 (Query Params) 的静态解析

针对不支持原生 URLSearchParams 的旧环境或纯字符串处理场景:

javascript
function getQueryParams(url) {
  const params = {};
  const search = url.split('?')[1];
  if (!search) return params;
  
  search.split('&').forEach(pair => {
    const [key, val] = pair.split('=');
    if (key) {
      params[key] = decodeURIComponent(val || '');
    }
  });
  return params;
}

留言板

加载评论中...
操作系统的底层原理解析(Linux & OS)
自定义域名配置
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1