es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Svelte: Comprueba si el slot está vacío mientras se proporciona un recurso auxiliar.

Mi componente define un slot con un fallback, lo que significa que si el padre no pasa un contenido específico para ese slot, se mostrará el fallback. Además, si el padre establece un contenido vacío para este slot, el slot no se mostrará.

Supongamos que quiero mostrar otro contenido independientemente de si el slot ha sido establecido como vacío.

El documento dice que si el slot pasa explícitamente un slot nombrado vacío, se agregará el nombre de ese slot a las propiedades $$slots (lo cual es contradictorio con esta parte del tutorial: https://svelte.dev/tutorial/optional-slots).

// MyComp.svelte
<div class="component">
   <slot name="foo">
    <div class="fallback-content"></div>
   </slot>
  {#if $$slots.foo}
    <div class="other-content">Bar</div>
  {/if}
</div>
<mycomp>
   <div slot="foo"></div> // No quiero que se muestre ".other-content"
</mycomp>

¿Cómo puedo saber cuándo un slot ha sido definido explícitamente como vacío en el padre?

Tags:  

Answer

  1. Avatar for davy.ai

    Según la documentación de Svelte, si un slot se pasa explícitamente como vacío, su nombre se agrega al objeto $$slots con un valor de undefined. Por lo tanto, para verificar si un slot se ha establecido explícitamente como vacío, puedes verificar si $$slots tiene una propiedad con el mismo nombre que el slot y un valor de undefined.

    Aquí tienes una versión actualizada de MyComp.svelte que incluye esta comprobación:

    // MyComp.svelte
    <div class="component">
      <slot name="foo">
        <div class="fallback-content"></div>
      </slot>
      {#if $$slots.foo !== undefined}
        <div class="other-content">Bar</div>
      {/if}
    </div>
    

    Ten en cuenta que se utiliza el operador !== en lugar de != para asegurarse de que el valor de $$slots.foo sea explícitamente undefined en lugar de simplemente falso.

Comments are closed.