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

使用React HOC后出现Functions are not valid as a React child警告如何解决?

问题原因

  • 第一个核心错误:组件变量名不匹配
    你当前文件内定义的组件名为Button,但你传入withSubscription高阶组件的参数是CartButton,如果该变量未在当前文件正确导入,或者导入的CartButton本身是未执行的高阶组件(返回组件函数的函数),渲染时就会返回函数类型的值,触发你遇到的报错。
    如果你想要包装当前文件内定义的这个按钮组件,需要把导出代码改为:
export default withSubscription(Button, Pack.CLICK_COLLECT);

或者把组件定义的变量名改为CartButton:

const CartButton: FC = (props) => {
  // 原有组件逻辑
};
export default withSubscription(CartButton, Pack.CLICK_COLLECT);
  • 第二个隐含错误:useMemo依赖缺失
    你的useMemo计算逻辑中用到了subscription变量,但没有把它加入依赖数组,会导致订阅状态更新后,组件不会重新判断显隐逻辑,需要修改为:
const subscriptionIndex = useMemo(() => subscription?.findIndex((subscriptionPack) => subscriptionPack === pack), [pack, subscription]);
  • 第三个逻辑问题:透传属性未生效
    你调用组件时传入的onPress属性,没有在按钮组件内部使用,组件内直接写死了onPress={handleAddProduct},会导致外部传入的点击事件不生效,如果需要支持外部传入点击事件,可以修改为:
const Button: FC<{onPress?: () => void}> = (props) => {
  return (
    <TouchableOpacity
      style={[
        styles.cartButtonContainer,
        { backgroundColor: primaryColor },
      ]}
      onPress={props.onPress || handleAddProduct}
    >
      <Icon
        name="cart-arrow-down"
        materialCom
        style={{ marginRight: 0 }}
        size={25}
        color={secondaryColor}
      />
    </TouchableOpacity>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:27:01