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

使用React Context在组件间传值时createContext报类型不兼容错误如何解决?

报错原因

无法将对象字面量绑定到defaultValue来调用createContext,因为index属性中的number [1]与Number [2]不兼容。

该报错属于Flow类型系统的类型不匹配问题:

  • Flow中首字母大写的Number对应JavaScript的Number包装对象类型,仅匹配new Number(xxx)创建的实例
  • 你代码中传入的默认值0、组件传递的index变量都是原始数值类型,对应的Flow类型为小写的number,二者不兼容导致报错。
修复方案

修改Context定义文件中的两处类型声明,将大写Number替换为小写number即可:

// @flow
import React, { createContext, useContext } from "react";

export type CountryIndexProviderType = {
  index: number, // 此处改为小写number
};

const CountryContext = createContext<CountryIndexProviderType>({
  index: 0,
});

type CountryContextProviderProps = {
  index: number, // 此处改为小写number
};

const CountryContextProvider = ({ index }: CountryContextProviderProps) => {
  return <CountryContext.Provider value={{ index }}></CountryContext.Provider>;
};

const useCountryIndexContext = () => useContext(CountryContext);

export { CountryContext, CountryContextProvider, useCountryIndexContext };
额外注意事项

你当前代码中的CountryContextProvider没有包裹任何子组件,消费Context的第二个组件如果不在Provider的子组件树内,只会拿到Context的默认值,无法获取你传入的动态index值。需要调整嵌套结构,将消费组件放到Provider内部:

// 设置index的组件修改后结构
import { CountryContextProvider } from "/EnteredCountriesContext";

return (
  <StyledWrappingContainer>
    <StyledProgress>{index + 2}</StyledProgress>
    <CountryContextProvider index={index}>
      {/* 所有需要消费该Context的组件都要放在Provider标签内部 */}
      <ConsumerComponent />
    </CountryContextProvider>
  </StyledWrappingContainer>
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:51:00