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

Nuxt3/Vue3:属性变更时如何动态切换渲染的组件?

解决ChatWindow组件不随conversationId更新的问题

核心方案:给ChatWindow添加唯一key属性

Vue会依据组件的key值判断是否复用组件实例,当key变化时,会销毁旧组件并创建全新实例。你只需给ChatWindow绑定与conversationId关联的key即可实现需求:

<template>
    <div v-if="conversationId">
        <h1>Current conversation: {{ conversationId }}</h1>
        <ChatWindow :conversationId="conversationId" :key="conversationId"/>
    </div>
</template>

<script setup>
    const conversationId = useState('conversationId');
    
    const showConversation = (convId) => {
        conversationId.value = convId;
    }
</script>

原理说明

  • Vue的虚拟DOM diff算法会对比组件的key值,当key改变时,会判定这是一个全新组件,进而销毁旧实例、创建新实例,新实例会自动接收更新后的conversationId属性。
  • 若未设置key,Vue会尝试复用现有组件实例,这会导致组件内部状态不会重置,初始化逻辑也不会重新执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:31:59