第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將值傳遞給函數(shù)時(shí),Svelte 值不會(huì)在屏幕上更新

將值傳遞給函數(shù)時(shí),Svelte 值不會(huì)在屏幕上更新

慕尼黑5688855 2023-07-14 16:33:54
有點(diǎn)困惑為什么下面不起作用。我已經(jīng)嘗試過(guò)了,我不向函數(shù)傳遞參數(shù),并且可以更新 UI,但如果我傳遞參數(shù)并對(duì)其執(zhí)行相同的操作,它會(huì)在代碼中更新它,我可以 console.log 它已退出,但 UI 未更新。這有效:<script>   import { text, toggle_class } from "svelte/internal";   let line1 = {name:"line 1", display:"some text here", originalText:"some init text", visible:true};function toggleView(){     line1.visible = !line1.visible;    if(!line1.visible) line1.display = "*************"    else line1.display = line1.originalText};</script><main>    <button on:click="{toggleView}">{line1.display}</button></main>這不起作用:<script>   import { text, toggle_class } from "svelte/internal";   let line1 = {name:"line 1", display:"some text here", originalText:"some init text", visible:true};function toggleView(field){     field.visible = !field.visible;    if(!field.visible) field.display = "*************"    else field.display = field.originalText};</script><main>    <button on:click="{toggleView(line1)}">{line1.display}</button></main>我認(rèn)為這可能是因?yàn)槲覐?Svelte 的角度將其分配給局部變量,但我不確定如何調(diào)用函數(shù)來(lái)使其可重用,因?yàn)槲覍?duì)一堆行執(zhí)行此操作。任何幫助,將不勝感激。
查看完整描述

2 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

當(dāng)您設(shè)置on:click為 時(shí)toggleView(line1),該函數(shù)會(huì)立即執(zhí)行,就像您將其設(shè)置為toggleView()而不是toggleView在其他工作示例中一樣。


您有兩種方法可以解決此問(wèn)題。最常見(jiàn)的方法是將on:click處理程序轉(zhuǎn)變?yōu)?lambda/匿名函數(shù):


<button on:click="{() => toggleView(line1)}">{line1.display}</button>

另一種不太常見(jiàn)的方法是修改處理函數(shù)并將其轉(zhuǎn)換為柯里化函數(shù):


function toggleView(field) {

    return function() { 

        field.visible = !field.visible;

        if(!field.visible) field.display = "*************"

        else field.display = field.originalText

    };

};

在這種情況下on:click={toggleView(field)},將返回一個(gè)綁定到單擊處理程序的函數(shù),并且該函數(shù)將在單擊按鈕時(shí)實(shí)際執(zhí)行。


查看完整回答
反對(duì) 回復(fù) 2023-07-14
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

在原始 HTML + JS 中,內(nèi)聯(lián)事件處理程序?qū)嶋H上onclick是在事件發(fā)生時(shí)將執(zhí)行的一段代碼。特別是,如果您在處理程序中使用函數(shù),則必須調(diào)用它:

示例(不是 Svelte):

<button onclick="toggleView()" />

相反,在 Svelte 中,事件處理程序應(yīng)該是一個(gè)函數(shù),它將在事件發(fā)生時(shí)被調(diào)用。

好的,因?yàn)?code>toggleView是一個(gè)函數(shù):

<button on:click={toggleView} />

不好,因?yàn)樗?code>toggleView()每次渲染標(biāo)記時(shí)都會(huì)調(diào)用(即當(dāng)響應(yīng)式變量更改時(shí)),并且 _the 的返回值togggleView()綁定到click事件:

<button on:click={toggleView()} />

如果您需要將本地參數(shù)傳遞給事件處理程序,那么您需要包裝該函數(shù)以仍然獲得您想要的內(nèi)容(在事件發(fā)生時(shí)調(diào)用整個(gè)函數(shù),而不是在重新調(diào)用標(biāo)記時(shí)調(diào)用):

示例,OK + 參數(shù):

<button on:click={() => toggleView(line1)} />

請(qǐng)注意,這里的處理程序是() => toggleView(line1),而不是toggleView(line1)。


查看完整回答
反對(duì) 回復(fù) 2023-07-14
  • 2 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)