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

SvelteKit页面加载时Bootstrap标签页active类未生效问题

问题

我正在学习SvelteKit,想结合Bootstrap 5.3的标签页组件制作仪表盘。为避免跳转到不同路由,使用<button>标签而非<a>标签,通过点击按钮切换页面内容。已初始化首个标签项并为其分配active类,且确认Bootstrap已正确引入项目,但页面加载时首个标签组件未按预期获得active类,尝试使用onMount函数重新分配也无效。代码如下:

<script>
    const firstTabItem = {
        id: "0",
        title: "Home"
    };

    const tabItems = [
        {
            id: "1",
            title: "About us"
        },
        {
            id: "2",
            title: "Products"
        },
        {
            id: "3",
            title: "Contact"
        },
    ]

    let currentTab = 0;
</script>

<h1>Dashboard</h1>

<ul class="nav nav-tabs">
    <button class="nav-link" class:active={firstTabItem.id === currentTab} on:click={() => {currentTab = firstTabItem.id}}>{firstTabItem.title}</button>

    {#each tabItems as item}
        <button class="nav-link" class:active={item.id === currentTab} on:click={() => {currentTab = item.id}}>{item.title}</button>
    {/each}         
</ul>
原因分析

核心问题是类型不匹配:

  • currentTab的初始值是数字类型的0
  • 所有标签项的id都是字符串类型(比如"0")
    Svelte中class:active使用全等运算符===做判断,数字与字符串的全等比较结果为false,因此默认不会为首个标签添加active类。
修复方案

有两种简单的解决方式:

方式1:统一变量类型

将currentTab的初始值改为字符串类型,与标签项的id类型保持一致:

let currentTab = "0";

方式2:调整比较逻辑

把全等比较改为非全等==,或者手动进行类型转换:

// 方式A:使用非全等比较
class:active={firstTabItem.id == currentTab}

// 方式B:将字符串id转为数字后比较
class:active={Number(firstTabItem.id) === currentTab}
修改后的完整代码
<script>
    const firstTabItem = {
        id: "0",
        title: "Home"
    };

    const tabItems = [
        {
            id: "1",
            title: "About us"
        },
        {
            id: "2",
            title: "Products"
        },
        {
            id: "3",
            title: "Contact"
        },
    ]

    // 统一为字符串类型的初始值
    let currentTab = "0";
</script>

<h1>Dashboard</h1>

<ul class="nav nav-tabs">
    <button class="nav-link" class:active={firstTabItem.id === currentTab} on:click={() => {currentTab = firstTabItem.id}}>{firstTabItem.title}</button>

    {#each tabItems as item}
        <button class="nav-link" class:active={item.id === currentTab} on:click={() => {currentTab = item.id}}>{item.title}</button>
    {/each}         
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:13