【问题标题】:Svelte does not update the components when values change当值更改时,Svelte 不会更新组件
【发布时间】:2021-10-03 00:40:06
【问题描述】:

我过去广泛使用过 Vue.js,所以这种模式可能无法很好地转化为苗条,我明白这一点。

我的问题是为什么以下内容在 svelte 中不起作用以及使用的正确模式是什么。

当我单击编辑按钮时,它按预期工作,但是当我单击保存时,它不会恢复到主组件。值似乎已更新,但组件未刷新。

Main.svelte

<script>
        import Editing from './editing.svelte';
        let data = true;
    let editing = false;
    let editingSection;

    function startEditing(section) {
        editingSection = section;
        editing = true;
    }

    function doneEditing() {
        editing = false;
        editingSection = '';
    }

</script>

<div>
    {#if data && !editing}
        <div>
                  Yes we have data!
        <button on:click={startEditing("main")}>Edit</button>
        </div>
    {/if}

    <!-- Are we in editing mode -->
    {#if editing}
        <Editing section={editingSection} on:done-editing={doneEditing}/>
    {/if}
</div>

editing.svelte

<script>
    import { createEventDispatcher } from 'svelte';
    export let section = null;

    const dispatch = createEventDispatcher();

    function save() {
        dispatch('done-editing');
    }

</script>

<div>
    Editing Section {section}
    <button on:click={save}>Save</button>
</div>

我什至尝试过使用 $: 来使语句具有反应性。不工作

Svelte 版本:3.34.0

SvelteKit

【问题讨论】:

    标签: javascript svelte-3 sveltekit


    【解决方案1】:

    你的错误是&lt;button on:click={startEditing('main')}&gt; 没有做你期望它做的事情。它将在渲染过程中执行 startEditing 函数并将该函数的返回值添加为点击事件的监听器。

    正确的语法是:&lt;button on:click={() =&gt; startEditing('main')}&gt; 如您在此处看到的,处理程序是一个函数

    在另一个事件处理程序中:&lt;Editing on:done-editig={doneEditing}&gt; 你正确地传递了一个函数。

    【讨论】:

    • 哇,成功了!我不知道处理程序的行为。我认为这只是我们必须传递的函数名。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多