You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React TypeScript中通过useState传递JSON对象数组的正确实现

React TypeScript中正确导入本地分类数组的解决方法

错误根源

你收到ts(2345)错误的核心原因是误用了JSON.parse():categories本身就是一个TypeScript数组对象,并非JSON格式的字符串,但JSON.parse()要求参数必须是字符串,类型不匹配导致报错。

修正后的useDictionary.ts实现

不需要对本地导入的数组做任何解析操作,直接使用即可。以下是两种可行的实现方式:

方式一:直接用静态数据初始化State(推荐,适合静态数据)

import { useState } from "react";
import categories from "../data/categories";

// 显式声明类型,和categories结构完全匹配
type DataCategoryType = {
  value: string;
  label: string;
};

const useDictionary = () => {
  // 直接将categories作为State初始值,TypeScript会自动验证类型
  const [category, setCategory] = useState<DataCategoryType[]>(categories);

  // 可选:返回setCategory,方便外部组件修改分类数据
  return {
    category,
    setCategory
  };
};

export default useDictionary;

方式二:使用useEffect初始化(适合未来可能改为从API获取数据的场景)

import { useState, useEffect } from "react";
import categories from "../data/categories";

type DataCategoryType = {
  value: string;
  label: string;
};

const useDictionary = () => {
  const [category, setCategory] = useState<DataCategoryType[]>([]);

  useEffect(() => {
    // 静态数据直接赋值,无需解析
    setCategory(categories);
  }, []); // 空依赖确保只执行一次初始化

  return { category };
};

export default useDictionary;

APP组件使用方式

你的原有调用代码无需修改,直接使用即可:

const { category } = useDictionary();

内容的提问来源于stack exchange,提问作者user3269443

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:07:34