Un usuario preguntó 👇

[ad_1]

Porque no child ¿Se invoca el método Ondestroy() después de eliminar un componente principal del DOM?

REEMPLAZAR

App.esbelta

<script>
    import Child from "./child.svelte";
    let compRef;
</script>

<button on:click=() => compRef.parentNode.removeChild(compRef)>remove</button> 

<div bind:this=compRef>
    <Child />
    <Child />
    <Child />
</div>

niño.esbelto

<script>
    import  onMount, onDestroy  from "svelte";
    onDestroy(()=> console.log("Child was destroyed!"))
</script>

<h1>
    Child
</h1>

Posible respuesta

  1. comRef mantiene una referencia a div elemento, esto no es un componente
  2. Manipular el DOM directamente en Svelte generalmente no es una buena idea. Si desea eliminar elementos DOM, envuélvalos en un #if bloquear y establecer la condición en false
    REEMPLAZAR
<script>
    import Child from "./child.svelte";
    let condition = true;
</script>

<button on:click=() => condition = false>remove</button> 

#if condition
<div>
    <Child />
    <Child />
    <Child />
</div>
/if

o, if el contenedor era un componente, también se podía hacer llamando .$destroy()
REEMPLAZAR

<script>
    import Child from "./Child.svelte";
    import Parent from "./Parent.svelte";
    let compRef
</script>

<button on:click=() => compRef.$destroy()>remove</button> 

<Parent bind:this=compRef>
    <Child />
    <Child />
    <Child />
</Parent>

Compruebe la consola para ver que en ambos casos el onDestroy callback correrá

Posible respuesta

onDestroy no tiene nada que ver con que el elemento esté en el DOM. Los componentes tampoco pueden tener ningún elemento.

O callback es limpiar los detectores de eventos y otras cosas que no gestiona Svelte. La función se llamará automáticamente. if Svelte elimina un componente. Si crea una instancia de un componente, debe llamar $destroy a mano.

Su ejemplo parece un caso para usar un simple #ifde esa manera Svelte destruirá el componente cuando la condición sea false.

.
[ad_2]

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto le daremos una posible resolucion , muchas gracias

eso es todo,espero que te funcione

¿Te ha resultado útil??

0 / 0

Deja una respuesta 0

Your email address will not be published. Required fields are marked *