有条件地渲染同一个组件不会触发 mounted() 钩子

Conditionally rendering the same component does not trigger mounted() hook

我是 Vue 的新手,所以如果我的思维过程有误,请纠正我。我正在尝试有条件地呈现这样的组件:

<div>
  <Map v-if="bool" mapSrc="src1.jpg" :idList="idList1" :data="dataVariable1"></Map>
  <Map v-else mapSrc="src2.jpg" :idList="idList2" :data="dataVariable2"></Map>
</div>

我的目标是根据 v-if 状态使用不同的 props 渲染相同的组件。因此,当 bool 为 true 时,它​​应该呈现第一个组件,而当我将 bool 切换为 false 时,它​​应该呈现第二个选项。道具似乎正在正确改变,但是当我切换 bool 状态时,它似乎没有再次 运行 mounted() 挂钩,这表明 component1 似乎没有卸载,它只是切换了道具基本上。

我想要的是,当 bool 为 false 时,它​​应该呈现整个组件实例的新版本,并与组件 1 中之前发生的事情隔离开来。

我怎样才能做到这一点?

根据 Linus Borg 的回答 here,您应该为它们添加一个唯一的 key 属性。

您可以使用 key 属性实现此目的 为 2 个地图组件指定不同的 key

<Map v-if="bool" mapSrc="src1.jpg" :idList="idList1" :data="dataVariable1" key="map1"></Map>
  <Map v-else mapSrc="src2.jpg" :idList="idList2" :data="dataVariable2" key="map2"></Map>