"利用React自定义Hook管理地名数据:一次简洁实践"

使用自定义Hook获取地名数据

在日常的前端开发中,很多时候我们需要处理类似的逻辑或者数据结构。这时,React的自定义Hook为我们提供了一种优雅的解决方案。今天,我们将探讨如何使用自定义Hook来获取和管理地名数据。

基本概念

首先,为了更好地理解,我们需要有一个基本概念。在我们的案例中,我们希望获取中国的省、市、区数据。我们将根据所提供的PlaceType来获取相应的地名。

实现

tsx 复制代码
/**
 * 自定义Hook,基于所提供的PlaceType获取地名。
 *
 * @param {string} PlaceType - 查询的地点类型。默认为空字符串。
 * @returns {object} 包含省份数据、城市数据、区域数据以及获取城市和区域数据的函数的对象。
 */
function useGetPlaceName(PlaceType: 'td' | '' = ''): {
  provinceData: PlaceNameProps[];
  cityData: PlaceNameProps[];
  areaData: PlaceNameProps[];
  getCityAndArea: (key: string, type: 'city' | 'area') => void;
} {
  // 省、市、区的数据状态
  const [provinceData, setProvinceData] = useState<PlaceNameProps[]>([]);
  const [cityData, setCityData] = useState<PlaceNameProps[]>([]);
  const [areaData, setAreaData] = useState<PlaceNameProps[]>([]);
  const [CnData, setCnData] = useState<Record<string, unknown>[]>([]);

  /**
   * 根据PlaceType获取和处理城市数据。
   */
  useEffect(() => {
    queryCity(PlaceType).then((res) => {
      if (res) {
        const CnList = PlaceType === 'td' ? res['10045'] : res['86'];
        const tmpData = Object.entries(CnList).map(([key, value]) => ({ key, value }));
        setProvinceData(tmpData);
        setCnData(res);
      }
    });
  }, [PlaceType]);

  /**
   * 根据提供的key和type获取和处理城市或区域数据。
   *
   * @param {string} provinceKey - 省份的键。
   * @param {'city' | 'area'} type - 要获取的数据类型,城市或区域。
   */
  const getCityAndArea = (provinceKey: string, type: 'city' | 'area') => {
    const dataSubset = CnData[String(provinceKey)];
    const tmpData = Object.entries(dataSubset).map(([key, value]) => ({ key, value }));
    
    if (type === 'city') setCityData(tmpData);
    else if (type === 'area') setAreaData(tmpData);
  };

  return { provinceData, cityData, areaData, getCityAndArea };
}

export { useGetPlaceName };

我们首先导入了必要的hooks------useStateuseEffect

详细分析

  1. useState的初始化

我们定义了四个状态:provinceData, cityData, areaDataCnData,用于存储省、市、区的数据和整体数据。

  1. useEffect的作用

useEffect保证了当PlaceType发生变化时,我们的数据会重新查询。在内部,我们通过调用queryCity函数获取数据,并对数据进行处理,最后更新到我们的状态中。

  1. getCityAndArea 函数

这个函数的目的是获取特定省份的城市或区域数据。根据提供的provinceKey和类型(城市或区域),它处理并更新相应的状态。

结论

通过使用自定义Hook,我们可以更加模块化地管理和处理地名数据,从而使代码更加清晰和可维护。这只是自定义Hook的一个小示例,但希望这能帮助你看到其强大的功能和在日常开发中的潜在应用。

相关推荐
Simon_He19 分钟前
一个渲染内核,五个框架包:我的流式 Markdown 渲染库是怎么长成“全家桶”的
前端·vue.js·markdown
小满zs38 分钟前
关于HBuilderX+ 微信小程序开发工具启动的问题
前端·uni-app
林深见鹿_海蓝见鲸1 小时前
微信小程序反编译完整教程(Windows 新手版)
前端
默_笙1 小时前
😋 我让爬虫终于看到了我的网站,后端同事说"这也行?"(上):SEO 与渲染模式
前端·javascript
feixing_fx1 小时前
告别枯燥字体:Web 字体加载策略与 font-display 最佳实践
前端·css·前端框架·交互·css3
Liora_Yvonne2 小时前
不懂后端,只会 TypeScript,想独立做完整项目?这套全栈底座就是给前端准备的
前端·后端·全栈
前端Hardy2 小时前
GitHub 爆火!236K+ Star!一套 Skills 让 AI 按工程师方式写代码
前端·后端
烬羽2 小时前
AI Coding 全流程实战:从需求到上线,我用 AI 开发了一个 NPM 包
前端·react.js·ai编程
前进的程序员2 小时前
Codex破局:前端组件秒级生成|提速React/Vue开发,可复用提示词+实战调试经验
前端·vue.js·react.js·codex
前端snow2 小时前
ai agent ---output汇总
前端