【问题标题】:Testing svelte dynamic components测试纤细的动态组件
【发布时间】:2021-12-15 08:17:55
【问题描述】:

我不久前首次推出 Svelte 并开始了一个项目,但在组件方面遇到了一些问题。

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

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

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

【问题讨论】:

    标签: svelte svelte-3 svelte-component


    【解决方案1】:

    问题出在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}
    

    【讨论】:

    • 谢谢,现在我明白为什么它不起作用了,但我会检查template 而不是templateProps,因为templateProps 有时可能为空或未定义
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2020-03-03
    • 2020-12-02
    • 2020-08-18
    • 2021-08-24
    • 1970-01-01
    • 2019-11-06
    • 2018-12-02
    相关资源
    最近更新 更多