Blazor WASM 在组件之间传递值

Posted

技术标签:

【中文标题】Blazor WASM 在组件之间传递值【英文标题】:Blazor WASM passing values between components 【发布时间】:2021-06-08 12:34:24 【问题描述】:

我从微软提供的默认应用开始。我拿起柜台,在同一页上减少和增加计数。增加和减少是放置在 Counter 内的子组件,它是仅显示当前计数的父组件。当您点击我刚才提到的 2 个子组件中的一个按钮时,我的做法是更新 currentCount 值。 我尝试调查状态,这似乎对我正在做的事情有很多工作,并且记住我没有后端。

这里是 Counter 组件或父组件。

@page "/counter/currentCount:int"


<h3>Counter</h3>
<p>Current count: @currentCount</p>
<Decrease currentCount = "@currentCount"></Decrease>
<Increase currentCount = "@currentCount" ></Increase>

@code 

    [Parameter]
    public int currentCount get;set;


减少子组件计数。

<button class="btn btn-secondary" @onclick="decreaseCount">Decrease</button>

@code 
    [Parameter]
    public int currentCount get;set;

    public void decreaseCount() 
        currentCount--;
    

并增加儿童补偿

<button class="btn btn-primary" @onclick="IncrementCount">Increase</button>

@code 
    [Parameter]
    public int currentCount get;set;
    
    private void IncrementCount() 
        currentCount++;
    

【问题讨论】:

【参考方案1】:

你很亲密!

您正在初始化每个控件中的参数,但参数未绑定。我不确定 Blazor 是否已经引入了事件连接的速记版本,但以下应该可以工作。请注意,Visual Studio 很有可能会抱怨它无法在回调类型之间进行转换——如果是这样,请忽略它。

另请注意,EventCallback 的名称必须与参数名称完全相同,并添加“已更改”一词才能使其工作:

主控

<h3>Counter</h3>
<p>Current count: @currentCount</p>
<Decrease @bind-currentCount="@currentCount"></Decrease>
<Increase @bind-currentCount="@currentCount"></Increase>

@code 
    public int currentCount  get; set; 

Decrease.razor

<button class="btn btn-secondary" @onclick="decreaseCount">Decrease</button>

@code 
    [Parameter]
    public int currentCount  get; set; 
    [Parameter]
    public EventCallback<int> currentCountChanged  get; set; 

    private async Task decreaseCount()
    
        currentCount--;
        await currentCountChanged.InvokeAsync(currentCount);
    

Increase.razor

<button class="btn btn-primary" @onclick="IncrementCount">Increase</button>

@code 
    [Parameter]
    public int currentCount  get; set; 
    [Parameter]
    public EventCallback<int> currentCountChanged  get; set; 

    private async Task IncrementCount()
    
        currentCount++;
        await currentCountChanged.InvokeAsync(currentCount);
    

我不知道 Peter Morris 是谁,也不知道他为什么免费制作以下网站,但这是我第一次以一种对我有意义的方式了解事件连接的地方。

https://blazor-university.com/components/two-way-binding/

【讨论】:

以上是关于Blazor WASM 在组件之间传递值的主要内容,如果未能解决你的问题,请参考以下文章

Blazor WASM - 分成多个组件 (MudBlazor)

C#:如何在 Blazor Wasm 托管中将动态 Razor 组件从服务器发送到客户端?

如何在同一 Blazor 页面上的 Razor 组件之间传递数据?

WASM Blazor 在用作嵌套组件的参数时将内部对象报告为 null (VS2022/.Net core 6)

Blazor_WASM之3:项目结构

在 Blazor 中将值从子组件传递到父页面的良好做法?