BL0005:不应在其组件之外设置组件参数。
我在一个组件中有一个组件。当我的外部组件状态发生变化时,我想更新内部组件的状态。外部组件是一个自动完成实现,改变的状态是输入文本,内部组件是自动完成项目列表,准确地说是突出显示的部分。
所以我通过它的参数改变了内部组件的状态。我收到了这个警告。为什么?
顺便说一句,代码完全按照我的预期工作。状态已同步,我匹配的文本在所有自动完成项目中突出显示。
我的猜测是更改参数可能会导致组件重新呈现自身,在我的情况下,这是完全期望和预期的行为。否则我为什么要在运行时更改组件的参数?
我在网上搜索了警告,但除了那个警告之外我没有发现任何有用的东西:https : //github.com/aspnet/AspNetCore/issues/12293
同样,看起来像我在代码中所做的那样修改参数是一种非常糟糕的做法,但同样,为什么?有没有理由我必须以不那么简单和直接的方式来做,或者有更简单和直接的方式来做到这一点?
我正在学习 Blazor。我没有基于组件的编程经验。
我有两个组件: aDateRangePicker和 a RadzenCheckBox。
<RadzenFieldset Text="Test Component">
<DateRangePicker @ref="calendar" />
<div>
<Radzen.Blazor.RadzenCheckBox TValue="bool" Change="@((args) => txtBoxChange(args))" />
<RadzenLabel Text="Check" />
</div>
</RadzenFieldset>
Run Code Online (Sandbox Code Playgroud)
现在,要求很简单。如果选中该复选框,则显示两个日历,如果未选中则显示一个日历。
我写了以下代码:
@code{
DateRangePicker calendar;
public void txtBoxChange(bool args)
{
if (args == true) //shows one calendar when checked
calendar.ShowOnlyOneCalendar = true;
else //shows two calendars when unchecked
calendar.ShowOnlyOneCalendar = false;
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常。
但我收到警告:
不应在其组件之外设置组件参数“ShowOnlyOneCalendar”。
我已经阅读了一些关于此警告的博客,其中建议建立父子组件关系以进行组件之间的通信。但这些不是父子关系。
我究竟做错了什么?达到这样的要求并且没有这个警告的最佳方法是什么?
我已经对这个错误做了我可以做的研究,只是不理解正确的解决方案。
示例代码(直接取自供应商示例)
https://blazor.syncfusion.com/documentation/menu-bar/getting-started/
<SfMenu Items="@MenuItems"></SfMenu>
@code {
public List<MenuItem> MenuItems = new List<MenuItem>{
new MenuItem{ Text = "File", Items = new List<MenuItem>{
new MenuItem{ Text= "Open" },
new MenuItem{ Text= "Save" },
new MenuItem{ Text= "Exit" }}
},
new MenuItem{ Text = "Edit", Items = new List<MenuItem>{
new MenuItem{ Text= "Cut" },
new MenuItem{ Text= "Copy" },
new MenuItem{ Text= "Paste" }}
},
new MenuItem{ Text = "View", Items = new List<MenuItem>{
new MenuItem{ Text = "Toolbars" },
new MenuItem{ …Run Code Online (Sandbox Code Playgroud)