在 Blazor 中,更改参数的字段或属性是否不好?

问题描述 投票:0回答:1

我正在制作一个课程安排/家庭作业页面。我的页面上有几个课程,每个课程都有几个课时。对于通过提供对“SingleClassPeriod”组件的引用来显示的每个时期,我可以从列表中添加书籍。我的问题:鉴于我没有更改作为参数提供给每个“SingleClasssPeriod”对象的reference,是否可以编辑实例的contents,例如填充书籍、人员和内容的列表等等?

为了避免并发/异步延迟问题,我使用一个事件来通知父级我已完成编辑(即它现在可以通过数据层安全地保存页面信息)。

SingleClass.razor

@foreach (var period in Class.Periods)
{
    <SingleClassPeriod Period=period />
}

单节课

<button @onclick="()=> Period.Books.Add(new Book())" />
<button @onclick="()=> OnFinishedEditing.InvokeAsync()" />

@code {
[Parameter]
    public ClassPeriod Period { get; set; }

[Parameter]
    public EventCallback OnFinishedEditing {get; set;}
}
c# .net asynchronous blazor
1个回答
0
投票

更改参数本身的状态没有任何问题。由您的算法和期望来决定是否应该发生更改以及如果应该发生,何时发生。如果您担心多个源尝试同时读取/写入相同的资源,那么您可以实现类似信号量的模式和要在资源上执行的操作队列。

因此,如果您的资源正在编辑,那么所有后续操作都将在队列中等待,直到编辑完成。而且,如果您的资源正在被读取,那么所有写入都将在队列中等待,直到所有读取完成(您可以允许多个实体同时读取同一资源)。

© www.soinside.com 2019 - 2024. All rights reserved.