摘要:下面是支持的事件參數(shù)方法方法這里是組件間雙向綁定的另一種方法,我們可以基于任何事件方法的執(zhí)行手動(dòng)觸發(fā)一個(gè),在中,用內(nèi)置函數(shù)手動(dòng)觸發(fā)屬性,同時(shí)回調(diào)父組件中相應(yīng)的方法,在父組件中,通過(guò)通知狀態(tài)已經(jīng)改變。
翻譯自:Study Blazor .NET,轉(zhuǎn)載請(qǐng)注明。
在blazor中單向綁定簡(jiǎn)單而直接,無(wú)需UI刷新或渲染。下面示例展示了單向數(shù)據(jù)綁定:
//Counter.razor@page "/counter"Counter
Current count: @currentCount
@functions { int currentCount = 0; void IncrementCount() { currentCount++; }}
這里 @currentComponent
的值會(huì)根據(jù)點(diǎn)擊 Click me
按鈕的次數(shù)而增加。 標(biāo)簽元素的值會(huì)自動(dòng)刷新無(wú)需任何其它組件刷新。
Blazor為雙向綁定提供多種選擇,與一些流行的JS語(yǔ)言相比實(shí)現(xiàn)起來(lái)更加優(yōu)雅。
在blazor中,bind
特性支持雙向數(shù)據(jù)綁定,在下面的例子中,checkbox 在同一個(gè)組件中使用了 bind
屬性:
//TwoWayBind.razor@page "/two-way-binding"This string will get value from above text field : @updateString.ToString()
@functions { Boolean updateString {get; set;} = true;}
雙向數(shù)據(jù)綁定也能用lamda表達(dá)式通過(guò) onchange
特性實(shí)現(xiàn)。不用擔(dān)心,Blazor提供了綁定屬性的簡(jiǎn)單方法,更多細(xì)節(jié)如下:
//TwoWayBind.razor@page "/two-way-binding"This string will get value from above text field: @updateString
@functions { string updateString = "";}
bind
特性可以使用值和事件 bind-value-
進(jìn)行擴(kuò)展,上面的示例可以用 oninput
代替 onchange
重寫如下:
//TwoWayBind.razor@page "/two-way-binding"This string will get value from above text field : @updateString
@functions { string updateString = "";}
組件之間傳遞的數(shù)據(jù)通過(guò)組件屬性及其屬性映射完成,這種方法使用 Action
數(shù)據(jù)類型。
//ParentComponent.razor Parent Component
String in Parent: @parentString
@functions{ private string parentString = "Initial Parent String"; private void PassToChild() { parentString += "- To Child"; } private void ReceivedFromChild(string str) { parentString = str; StateHasChanged(); }}
//ChildComponent.razorChild Component
String received from Parent : @ToChild
@functions{ [Parameter] private string ToChild{get;set;} [Parameter] Action FromChild{get;set;} private string childString; private void PassToParent() { childString = ToChild + "- To Parent"; FromChild(childString); }}
ChildComponent中的 FromChild
特性/屬性用 Action
類型從子組件向父組件傳遞值。在父組件中有一個(gè)帶有 string
類型參數(shù)的響應(yīng)函數(shù),ChildComponent組件中的按鈕點(diǎn)擊操作觸發(fā)這個(gè)函數(shù),并且反過(guò)來(lái)通知 PassToParent
函數(shù),為了通知父組件中的狀態(tài)已經(jīng)改變,我們使用了Blazor內(nèi)置函數(shù) StateHasChanged()
。
這種方法使用 EventCallback
數(shù)據(jù)類型指定事件變更來(lái)傳遞信息從而代替具體的數(shù)據(jù),這里不需要再調(diào)用 StateHasChanged()
函數(shù)。
//ParentComponent.razor Parent Component
Logging Event triggered from Child: @logString
@functions{ private string logString = ""; private void TriggerFromChild(UIMouseEventArgs e) { logString = e.ToString(); }}
//ChildComponent.razorChild Component
@functions{ [Parameter] private EventCallback Trigger { get; set; } }
在ChildComponent中,Trigger
屬性回調(diào)ParentComponent中相應(yīng)的帶有 UIMouseEventArgs
參數(shù)的TriggerFromChild
方法,同時(shí)在父組件中以字符串形式記錄。
下面是支持的事件參數(shù):
這里是組件間雙向綁定的另一種方法,我們可以基于任何事件/方法的執(zhí)行手動(dòng)觸發(fā)一個(gè) Action
,
//ParentComponent.razor Parent Component
Logging Event triggered from Child: @logString
@functions{ private string logString = ""; private void TriggerFromChild() { logString = "Triggered From Child using Action and Invoke"; StateHasChanged(); }}
//ChildComponent.razorChild Component
@functions{ [Parameter] private Action EventFromChild{get;set;} private void Trigger() { EventFromChild?.Invoke(); } }
在ChildComponent中,用內(nèi)置函數(shù) Invoke
手動(dòng)觸發(fā) EventFromChild
Action 屬性,同時(shí)回調(diào)父組件中相應(yīng)的 TriggerFromChild
方法,在父組件中,通過(guò) StateHasChanged()
通知狀態(tài)已經(jīng)改變。
Blazor提供了一種跨越整個(gè)RenderTree(所有組件)傳遞數(shù)據(jù)的方法,使用 CascadingValue
和 CascadingParameter
代替?zhèn)鬟f組件特性。傳遞的值可以被RenderTree (子組件)通過(guò)裝飾屬性 CascadingParameter
代替 Parameter
接收。
//RootComponent.razor@page "/base-component" App Base Component
@functions { private string pName {get;set;} = "New To Blazor"; private int pAge {get;set;} = 35;}
//ParentComponent.razor Parent Component
Profile Name is : @Name and Age is : @Age.ToString();
@functions{ [CascadingParameter(Name = "ProfileName")] string Name { get; set; } [CascadingParameter(Name = "ProfileAge")] int Age {get;set;}}
在 CascadingParameter
中,Name
參數(shù)必須與具有 CascadingValue
組件的 Name
屬性匹配,如果我們沒(méi)有聲明 Name
,那么 CascadingParameter
中的變量類型與 CascadingValue
中的 Value
屬性匹配。
最好聲明 Name
參數(shù),以避免混淆,這在應(yīng)用程序規(guī)模增長(zhǎng)時(shí)很有用。
除了用特性從父組件向子組件傳遞內(nèi)容,還可以在組件的 tag 元素中傳遞內(nèi)容,并且可以使用 RenderFragment
屬性在子組件中呈現(xiàn)。
ChildContent
是我們需要在子組件中使用的命名約定,以獲取父組件的內(nèi)容,
//ParentComponent.razor Parent Component
The line here is passed to child from Parent!!!
//ChildComponent.razorChild Component
@ChildContent
@functions{ [Parameter] private RenderFragment ChildContent { get; set; } }
RenderFragment
主要用于模板化目的,并基于子組件內(nèi)部的邏輯呈現(xiàn)內(nèi)容。
//ParentComponent.razor Parent Component
Bold Text here!!!
//ChildComponent.razorChild Component
@for(var i = 1; i <= 3; i++) { Line No : @i
@SampleText }@functions{ [Parameter] private RenderFragment SampleText { get; set; } }
此時(shí) SampleText
不是已經(jīng)存在的組件,它是在父組件中的 ChildComponent
tag元素中新生成的,同時(shí)在子組件中也聲明了相同的命名為 SampleText
的屬性。
SampleText
中的文本在子組件里循環(huán)渲染3次,這非常有助于創(chuàng)建模板組件、表格等。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124543.html
摘要:需要有一定的基礎(chǔ)和的使用經(jīng)驗(yàn)。這就是屬性的作用。方法接收一個(gè)新對(duì)象來(lái)重新賦值。也接收一個(gè)函數(shù),這個(gè)回調(diào)函數(shù)這里我默認(rèn)有一個(gè)參數(shù),表示之前的的值,這個(gè)函數(shù)的返回值就是最新的。但是不同的是在組件內(nèi)部是只讀的。 前言 寫這篇文章的主要目標(biāo)是讓初學(xué)者更快的上手 React 的項(xiàng)目開發(fā),能有一個(gè)循循漸進(jìn)的理解過(guò)程。需要有一定的 JavaScript 基礎(chǔ)和 NPM 的使用經(jīng)驗(yàn)。不多說(shuō)了,下面會(huì)按...
摘要:服務(wù)器檢查該,以此來(lái)辨認(rèn)用戶狀態(tài)。該值會(huì)在瀏覽器再次發(fā)起請(qǐng)求時(shí),傳遞給服務(wù)器失效的時(shí)間,單位秒。如果為,表示刪除該。該值可以在服務(wù)器運(yùn)行時(shí)動(dòng)態(tài)設(shè)置該是否僅被使用安全協(xié)議傳輸。安全協(xié)議有,等,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密。 什么是Cookie? ? ? Cookie是由W3C組織提出,最早由NetScape社區(qū)發(fā)展的一種機(jī)制。 ? ? Cookie是存儲(chǔ)于訪問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)...
摘要:如何解決呢編輯器解決方案編輯器編輯器介紹如下編輯器編輯器這是一個(gè)大佬用寫的支持把你的所有依賴打包獨(dú)立運(yùn)行時(shí),支持跨平臺(tái)的。背景介紹工作中我用到kotlin寫代碼,在orm上ktorm是一款非常優(yōu)秀的操作db的框架,我喜歡用它所以我寫了一個(gè)插件能夠增加我的工作效率,這款idea插件的主體邏輯是.net開發(fā)的(沒(méi)錯(cuò)是跨平臺(tái)的.net)。因?yàn)閐b-schema的解析邏輯我很在以前寫的一個(gè)visua...
摘要:一指針指向全局中的指向的是二指針指向?qū)ο笤诤瘮?shù)中指向的是對(duì)象,和全局中的不是同一個(gè)對(duì)象 一、this指針指向module.exports console.log(全局中的this指向的是module.exports); console.log(this); //{} this.obj = Hello World; console.log(this.obj); //Hello World...
閱讀 1821·2023-04-26 01:41
閱讀 3119·2021-11-23 09:51
閱讀 2777·2021-10-09 09:43
閱讀 9151·2021-09-22 15:13
閱讀 2484·2021-09-07 09:59
閱讀 2658·2019-08-30 15:44
閱讀 1159·2019-08-30 12:45
閱讀 2644·2019-08-30 12:43