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

React Native传递state hooks为props时报setActiveTab不是函数错误如何解决

错误原因

你在向HeaderButton组件传递setActiveTab属性时,误将状态值activeTab(字符串类型)传入,而非useState返回的状态更新函数setActiveTab,因此调用props.setActiveTab时会抛出「不是函数」的报错。

修复方案

将Header组件中两个HeaderButton标签的setActiveTab传参修改为正确的更新函数即可:

import React from "react";
import { useState } from "react";
import { View, Text, TouchableOpacity } from "react-native";

export default function Header(props) {
  const [activeTab, setActiveTab] = useState("Delivery");
  return (
    <View style={{ flexDirection: "row", alignSelf: "center"}}>
      <HeaderButton
        text="Delivery"
        activeTab={activeTab}
        setActiveTab={setActiveTab}
      />
      <HeaderButton
        text="Pick up"
        activeTab={activeTab}
        setActiveTab={setActiveTab}
      />
    </View>
  );
}

const HeaderButton = (props) => (
  <TouchableOpacity
    style={{
      backgroundColor: props.activeTab === props.text ? "black" : "white",
      paddingVertical: 10,
      paddingHorizontal: 40,
      borderRadius: 10,
    }}
    onPress={() => props.setActiveTab(props.text)}
  >
    <Text style={{ color: props.activeTab === props.text ? "white" : "black" }}>  {props.text}</Text>
  </TouchableOpacity>
);
额外优化说明
  • 原有代码里传递的bgColor、textColor属性实际没有被用到,样式已经通过activeTab判断动态生成,可以直接删除冗余传参,避免后续出现样式不生效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:03