簡體   English   中英

為什么雙向綁定組件在 Svelte 中更新兩次?

[英]Why two-way bound component updates twice in Svelte?

我有一個<select>綁定到activity.status ,如下所示:

<script>
import Dropdown from './Dropdown.svelte'
let activity = {
    id: 1,
    projectName: "Test Project",
    lead: {id: 10, value: "Unassigned"},
    status: {id: 3, value: "Closed"},
    statusDetail: {id: 15, value: "Missing Budget"}
    }

let statusOptions = [
        { id:1, value:"Open"},
        { id:2, value:"On-Hold"},
        { id:3, value:"Closed"}
        ]

$:console.log(activity.status);
</script>

<select bind:value={activity.status}>
    {#each statusOptions as option}
        <option value={option} >{option.value}</option>
    {/each}
</select>

<!-- <Dropdown  options={statusOptions} bind:selected={activity.status}/> -->

每次我更新<select>時都會觸發$:console.log(activity.lead)

但是一旦我改用<Dropdown/> ,它就會觸發兩次。 這是組件:

<script>
export let selected = {} 
export let options = [{id:0, value: "No Options..."}]
</script>

<select bind:value={selected}>
    {#each options as option}
        <option value={option} >{option.value}</option>
    {/each}
</select>

我對苗條的了解不多,但我研究了 API 並在 stackoverflow 上進行了搜索。 我唯一沒有嘗試的是發出自定義事件。 但這似乎有點額外的代碼和不雅致。 我不介意雙重更新,但它似乎很愚蠢。 所以我想知道:為什么會這樣? 我應該發出自定義事件嗎? 還是我犯了一些基本錯誤?

謝謝你,菲利普

我的問題突然消失了。 我懷疑它與單個頂級元素有關,因為在我刪除組件中的其他頂級元素后它消失了。 但是,當我把它們放回去時,它仍然有效,所以我不能再重現這個問題了。

Svelte 不要求您擁有像 Vue 或 React 這樣的單個頂級元素,所以這可能是我犯的一些錯誤,但不記得了。

同樣在Svelte 的官方教程中,他們建議人們謹慎使用組件綁定。 如果有人遇到同樣的問題,我會發布答案。 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM