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

React Context报错:类型'() => string'不存在属性'Provider'

React Context 报错:Property 'Provider' does not exist on type '() => string' 的修复方案

你遇到的错误核心原因是Context定义函数的返回值解构顺序完全搞反了,导致你试图在自定义Hook上访问Provider属性,自然触发类型错误。

问题根源分析

看你的TabContext定义函数:

export const TabContext = <A extends unknown | null>() => {
  const contextInstance = createContext<A | undefined>(undefined); // 这是带Provider的Context对象
  const useContextHook = () => { // 这是自定义的useHook
    const ctx = useContext(contextInstance);
    if (ctx === undefined) {
      throw new Error("invalid");
    }
    return ctx;
  };
  return [contextInstance, useContextHook] as const; // 返回顺序是[Context对象, 自定义Hook]
};

但在使用时你把解构顺序写反了:

// 错误:把Context对象赋值给了useTabsActionContext,把Hook赋值给了TabsActionContext
const [useTabsActionContext, TabsActionContext] = TabContext<ActiveTab>();
const [useTabsContext, TabsContext] = TabContext<SetActiveTab>();

TabsActionContext实际是那个自定义Hook函数,不是Context对象,所以没有Provider属性。

修复代码

只需要调整解构的顺序,把Context对象放在前面的变量,自定义Hook放在后面:

修改后的使用代码

import { Dispatch, ReactNode, SetStateAction } from "react";
import { TabContext } from "./tabContext";

export type ActiveTab = string;
export type SetActiveTab = Dispatch<SetStateAction<ActiveTab>>;

// 正确顺序:[Context对象, 自定义Hook]
const [TabsActionContext, useTabsActionContext] = TabContext<ActiveTab>();
const [TabsContext, useTabsContext] = TabContext<SetActiveTab>();

export { useTabsActionContext, useTabsContext };

export interface TabsProps {
  children: ReactNode;
}

function Tabs(props: TabsProps) {
  const { children } = props;
  // 注意:Provider必须传入value属性,否则会触发React警告
  return (
    <TabsActionContext.Provider value="默认激活Tab">
      <TabsContext.Provider value={(newTab) => console.log("切换到", newTab)}>
        {children}
      </TabsContext.Provider>
    </TabsActionContext.Provider>
  );
}

export default Tabs;

另外补充:使用Provider时必须传入value属性,否则React会抛出警告,上面代码中的value是示例值,你可以根据实际业务替换成对应的状态或方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:20:33