测试 svelte 动态组件

Testing svelte dynamic components

我不久前首次使用 Svelte 并开始了一个项目,但我遇到了一些组件问题。

我有 2 个数组(boxes1 和 boxes2),它们的内容显示在 2 个不同的 div 内的每个循环中,彼此相邻。我们可以通过单击添加按钮向每个数组添加元素:左边的元素用于 boxes1,右边的元素用于 boxes2。 两个数组中的每个元素都有一个从 1 开始的 id,每次删除数组中的所有元素时都会重置为 1。 div 中的每个奇数元素都是基于红色背景组件的动态组件。 div 中的每个偶数元素都是基于蓝色背景组件的动态组件。 两个 div 中的每个元素都可以通过单击元素内的按钮来删除:通过单击按钮,元素内的组件向父组件发送一个事件,以便该元素在被销毁之前从数组中删除.

问题是: 将一些元素添加到一个数组然后将其全部删除,然后再次添加元素后,添加的第一个元素未显示在 div 但存在于数组中。删除所有元素后不重置 id 解决了问题,但我需要重置它。

我能理解我的解释很混乱所以这里是REPL: https://svelte.dev/repl/ae13251cf3ac4c12ba10eabe20f376d1?version=3.44.0

问题出在这里 on:destroy 您设置了 show = false,因此当您从数组 show = false 中删除最后一个元素时,这就是第一个组件未显示的原因。您可以像这样更新 Box.svelte 组件:

<script>
  import { onMount, createEventDispatcher } from "svelte";
    
  export let template;
  export let templateProps;

  let show = true;

  const dispatch = createEventDispatcher();
    
    $: if(templateProps && templateProps.heading == 0){
        show = true;
    }

  const destroy = () => {
    show = false;
    dispatch("destroy");
  };
</script>

{#if show}
  <svelte:component
    this={template}
    on:close={() => destroy()}
    {...templateProps}
  />
{/if}