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

Riot.js动态挂载标签问题:切换菜单内容重复追加而非替换

解决Riot.js标签动态挂载时内容重复追加的问题

核心原因

riot.mount() 方法默认会在目标容器内追加新组件,而非替换已有内容,多次点击自然会导致组件堆叠。

解决方案

在挂载新组件前,先卸载挂载点内已有的Riot组件,确保容器清空后再挂载新内容:

修改nav-menu.tag.html的goTo方法

goTo(e) {
    let next_page = e.target.dataset.page_link;
    // 先卸载挂载点内所有已挂载组件,同时移除对应DOM元素
    riot.unmount('#mounting_point', true);
    // 再挂载目标组件
    riot.mount('#mounting_point', next_page);
}
  • 说明:riot.unmount(selector, true)的第二个参数true表示彻底移除组件关联的DOM节点,避免残留内容;若仅卸载组件逻辑保留DOM,可省略该参数。

完整修改后的nav-menu.tag.html代码

<nav-menu>
    <div class="menu_page">
        <div class="menu_page__items">
            <a onclick="{goTo}" class="menu_page__item" data-page_link="home-page">Home</a>
            <a onclick="{goTo}" class="menu_page__item" data-page_link="about-page">About</a>
            <a onclick="{goTo}" class="menu_page__item" data-page_link="contact-page">Contact</a>
        </div>
    </div>

   <script>
        export default {
            goTo(e) {
                let next_page = e.target.dataset.page_link;
                riot.unmount('#mounting_point', true);
                riot.mount('#mounting_point', next_page);
            }
        }
    </script>
</nav-menu>

额外优化方向

  • 若不想频繁卸载重建组件,可改用Riot的条件渲染(如<if>指令)控制不同页面组件的显示/隐藏,减少DOM操作开销
  • 可给挂载点添加加载状态提示,提升切换时的用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21