当前位置: 首页 > 知识库问答 >
问题:

vue3 动态组件和异步组件同时使用的时候,发现页面一旦元素发生变化,就会导致子组件重新触发mounted?

长孙逸仙
2024-06-19

父组件

<template>  <div>    <component :is="ddd('a')"></component>    <div v-if="show">其他元素</div>    <div @click="show = !show">点击</div>  </div></template><script setup lang="ts">import { defineAsyncComponent } from "vue";//这里的name必须由外面传递const ddd = (name) => {  return defineAsyncComponent(    async () => await import(`./${name}.vue`),  );};const show = ref(false)</script>

子组件:

<script setup lang="ts">import { onMounted } from "vue"onMounted(() => {  console.log('触发mounted')})</script><template>  <p class="read-the-docs">测试1</p></template><style scoped>.read-the-docs {  color: #888;}</style>

导致子组件mounted一直触发的原因是什么?keepAlive好像也没有作用?
在线demo

共有3个答案

曹奇文
2024-06-19
<template>  <div>    <component :is="ddd"></component>    <div v-if="show">其他元素</div>    <div @click="show = !show">点击</div>  </div></template><script setup lang="ts">import { defineAsyncComponent, ref } from 'vue'const ddd = (() => defineAsyncComponent(() => import('./a.vue')))()const show = ref(false)</script>
印晋
2024-06-19

无意间发现了一个解决方法,就是将 <component :is="ddd()"></component>这一部分全新封装到一个组件中,然后直接引入这个组件就好了。如果有更好的方法,可以帮忙补充下,谢谢。

周朗
2024-06-19

ddd改成静态对象,不然每次都会返回一个新的构造器,VNodeType不一致,组件就会重新走一遍unmountmount

 类似资料:
  • 我正在尝试向使用Apollo的GraphQL服务器发送突变查询。 然而,我只看到实现这一点的唯一方法是使用突变组件。https://www.apollographql.com/docs/react/essentials/mutations/#the-突变成分 有没有一种简单的方法可以发送这样的突变? 从“graphql标记”导入gql;

  • 编辑:我已经采取了一种不同的方法来解决这个问题:根据接受的答案,在上检索父组件中的动态子组件值。 我正在尝试让父组件发出一个Event/Observable,以便它的子动态组件在侦听这样的事件时触发一个动作。 我已经了解到,在动态组件中使用或修饰符是不可能的,所以... 这是我用例的大纲: 动态子组件由一组4个输入元素组成。(完成) 父组件具有按钮,用于添加动态子组件。此按钮可用于添加动态子组件的

  • 问题内容: 总览 我具有以下HTML结构,并且将和事件附加到了元素上。 问题 当我将文件拖到时,事件将按预期触发。但是,当我将鼠标移到子元素(例如)上时,会为该元素触发该事件,然后为该元素触发该事件。 如果我再次将鼠标悬停在该元素上,则再次触发该事件,这很酷,但是随后为刚刚剩下的子元素触发了该事件,因此执行了该指令,这并不酷。 此行为有问题的原因有两个: 我只附加&,所以我不明白为什么子元素也要附

  • 我知道mapstatetoprops正在将我们的Redux应用程序状态映射到我们的React组件道具,但是我不太明白当减速器返回一个新的状态时,幕后会发生什么——这是如何触发将道具映射到应用程序级别的组件的重新渲染的州? 在纯React中,setState触发重新渲染正确吗?类似的事情(或同样的事情)通过Redux发生吗?

  • 我是reactjs的新手,我不知道如何从父组件中更改子组件的状态。下面是代码 每当对父组件中的执行时,我希望子组件接收。 有什么建议吗?

  • 场景:我有两个片段,分别名为和。我从转到选择一个单元,使用

  • 我在用柏树。io根据react页面自动上传一个文件测试用例。用于文件上载的输入组件(type=file)是在呈现页面时在运行时创建的。 似乎按钮(通过单击“选择文件”)打开了一个本机文件选择器,而赛普拉斯网络驱动程序似乎不支持与之交互,所以在这种情况下,可能会触发一个模拟文件选择的事件。但是Cypress无法定位输入(type=file),因为它不是DOM的一部分,这意味着cy.get('输入[t