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

React Native TabBarItem点击无法切换激活样式的问题求助

问题修复方案

核心问题

你的代码点击无反应、状态不切换的原因是更新状态时传入了错误的数据类型:

  • 初始状态activeItem是字符串类型"fork"
  • 但onPress里调用setActiveItem({ active: "fork" })时,把状态改成了对象类型
  • 后续判断activeItem === "fork"永远为false,导致图标和文字一直处于灰色的非激活状态

修正代码

把setActiveItem的参数改为与初始状态一致的字符串即可:

export function TapBar() {
    const [activeItem, setActiveItem] = React.useState("fork");

    return (
        <View>
            <TabBarItem
                icon="fork"
                label="label"
                onPress={() => {
                    // 直接传入字符串,和初始状态类型保持一致
                    setActiveItem("fork");
                }}
                active={activeItem === "fork"}
            />
        </View>
    );
}

type TabBarItemProps = {
    label: string;
    icon: IconName<24>;
    onPress: () => void;
    active: boolean;
};

function TabBarItem({ label, icon, onPress, active }: TabBarItemProps) {
    return (
        <Pressable onPress={onPress}>
            <Icon color={active ? "red" : "gray"} name={icon} />
            {/* React Native中Text颜色需通过style设置,修正此处 */}
            <Text style={{ color: active ? "red" : "gray" }}>
                {label}
            </Text>
        </Pressable>
    );
}

多Tab扩展说明

如果后续要添加多个Tab项,只需给每个项设置唯一的标识字符串即可:

export function TapBar() {
    const [activeItem, setActiveItem] = React.useState("fork");

    return (
        <View style={{ flexDirection: 'row', justifyContent: 'space-around' }}>
            <TabBarItem
                icon="fork"
                label="首页"
                onPress={() => setActiveItem("fork")}
                active={activeItem === "fork"}
            />
            <TabBarItem
                icon="knife"
                label="我的"
                onPress={() => setActiveItem("knife")}
                active={activeItem === "knife"}
            />
        </View>
    );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:05:27