【问题标题】:Svelte Tabs - Don't reload / destroy dataSvelte Tabs - 不要重新加载/销毁数据
【发布时间】:2020-09-18 18:41:38
【问题描述】:

我正在使用此处描述的细长标签组件:

https://svelte.dev/repl/8e68120858e5322272dc9136c4bb79cc?version=3.5.1

在两个选项卡中,我有以下苗条的模板代码:

<TabPanel>
    <Filter/>
    <div id='to-filter' class='scroll-container'>
        {#each value.items as item, i}
                <Item 
                itemFilter={item.name}  
                itemDay={item.itemDay} 
                itemMonth={item.itemMonth} 
                itemYear={item.itemYear} 
                itemCity={item.itemCity} 
                itemCountry={item.itemCountry} 
                itemVenue={item.venue}
                itemLink={item.link}
                itemDotw={itemDatesOnly[i].itemDotw}
                />
        {/each}
    </div>
</TabPanel>

每次我单击选项卡在数据之间切换时,似乎都会重新加载或重建它。如何调整选项卡组件,使其不会每次都破坏数据?

【问题讨论】:

    标签: javascript templating svelte


    【解决方案1】:

    替换 TabPanel.svelte

    中的以下代码块
    {#if $selectedPanel === panel}
        <slot></slot>
    {/if}
    

    这样的:

    <div hidden={$selectedPanel !== panel}>
        <slot></slot>
    </div>
    

    这将确保所有当前未激活的选项卡面板都获得hidden 属性,使它们对用户不可见,但它们将出现在 DOM 中。

    这应该可以防止您的嵌套组件被重新渲染,因为当您在选项卡之间切换时它们不会被销毁和重新安装。

    【讨论】:

    • 这太棒了!太感谢了!!!如果我想在切换标签时添加淡入/淡出,那也可以吗?所以当一个完成淡出另一个淡入?
    • 我不确定是否可以在不重新渲染组件的情况下使用 Svelte 的过渡/动画。因此,您可能不得不求助于使用基于条件类触发的 CSS 过渡或动画。您可以使用 class 指令添加此类:svelte.dev/tutorial/classes
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2013-08-29
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多