是否需要重新分配从 URL 路由参数分配的 Blazor class 属性?
Is it necessary to reassign Blazor class properties assigned from URL route parameters?
当我第一次开始学习 Blazor 时,我遵循的教程会将由 URL 参数分配的页面的 class 属性重新分配给新的 class 属性,如下所示:
//URL = "/pagename/{parameter1}/{parameter2}"
[Parameter]
public string parameter1 { get; set; }
public string Parameter1 { get; set; }
[Parameter]
public string parameter2 { get; set; }
public string Parameter2 { get; set; }
protected override void OnInitialized()
{
Parameter1 = parameter1;
Parameter2 = parameter2;
}
为什么我不直接将 URL 参数分配给我首先要使用的页面属性?这样我就避免了额外的代码和处理。
//URL = "/pagename/{Parameter1}/{Parameter2}"
[Parameter]
public string Parameter1 { get; set; }
[Parameter]
public string Parameter2 { get; set; }
为什么我想使用第一种方式而不是第二种方式?如果有,那是什么?
*已按照评论中的建议进行编辑,以确保准确性和清晰度。
Why would I not just assign the URL parameters to the properties I want to use to avoid the extra code and processing like this?
//URL = "/pagename/{Parameter1}/{Parameter2}"
[Parameter]
string Parameter1 { get; set; }
[Parameter]
string Parameter2 { get; set; }
这正是它一直以来的样子。另请注意,路由模板中的参数名称可以以 lower-case 字母开头(最好)。
注意:参数属性应该是public。
这真的取决于你用参数做什么。
Blazor 中要遵循的一般规则是“组件不应覆盖它们自己的传入参数值属性”- Steve Sanderson's comment on this issue
Blazor 在内部跟踪参数状态,如果您的组件直接修改参数值 parameter1 = "foo"
,则“Blazor”不会看到该更改。
包含 Parameter1Changed
EventCallback
来更新父组件甚至还不够好,因为在更改参数值和更新内部状态之间仍有一段时间。这可能会导致组件渲染出现问题。
因此,如果您的组件要更新参数,您应该总是首先将其复制到本地 field/property,更新本地并调用您原来的 Parameter1Changed
EventCallback。这将允许更新任何状态。
在 URL 参数的情况下,您不太可能更新它们,但在某些情况下您可能会觉得这是个好主意 - 所以这可能就是您的教程采用这种策略的原因使用本地副本。
当我第一次开始学习 Blazor 时,我遵循的教程会将由 URL 参数分配的页面的 class 属性重新分配给新的 class 属性,如下所示:
//URL = "/pagename/{parameter1}/{parameter2}"
[Parameter]
public string parameter1 { get; set; }
public string Parameter1 { get; set; }
[Parameter]
public string parameter2 { get; set; }
public string Parameter2 { get; set; }
protected override void OnInitialized()
{
Parameter1 = parameter1;
Parameter2 = parameter2;
}
为什么我不直接将 URL 参数分配给我首先要使用的页面属性?这样我就避免了额外的代码和处理。
//URL = "/pagename/{Parameter1}/{Parameter2}"
[Parameter]
public string Parameter1 { get; set; }
[Parameter]
public string Parameter2 { get; set; }
为什么我想使用第一种方式而不是第二种方式?如果有,那是什么?
*已按照评论中的建议进行编辑,以确保准确性和清晰度。
Why would I not just assign the URL parameters to the properties I want to use to avoid the extra code and processing like this?
//URL = "/pagename/{Parameter1}/{Parameter2}"
[Parameter]
string Parameter1 { get; set; }
[Parameter]
string Parameter2 { get; set; }
这正是它一直以来的样子。另请注意,路由模板中的参数名称可以以 lower-case 字母开头(最好)。
注意:参数属性应该是public。
这真的取决于你用参数做什么。
Blazor 中要遵循的一般规则是“组件不应覆盖它们自己的传入参数值属性”- Steve Sanderson's comment on this issue
Blazor 在内部跟踪参数状态,如果您的组件直接修改参数值 parameter1 = "foo"
,则“Blazor”不会看到该更改。
包含 Parameter1Changed
EventCallback
来更新父组件甚至还不够好,因为在更改参数值和更新内部状态之间仍有一段时间。这可能会导致组件渲染出现问题。
因此,如果您的组件要更新参数,您应该总是首先将其复制到本地 field/property,更新本地并调用您原来的 Parameter1Changed
EventCallback。这将允许更新任何状态。
在 URL 参数的情况下,您不太可能更新它们,但在某些情况下您可能会觉得这是个好主意 - 所以这可能就是您的教程采用这种策略的原因使用本地副本。