组件参数不应在其组件之外设置

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

我正在尝试构建一个组件,该组件获取对象列表并在单击组件中的 html 按钮时执行在对象内部定义的操作。这里的代码实际上可以工作,但会发出警告。

  Warning BL0005: Component parameter 'ClickAction' should not be set outside of its component. (18, 17)

我在网上阅读了有关该问题的信息,我认为可以使用 EventCallback 而不是 Action 来解决此问题。但我不确定如何为给定的代码执行此操作。 我不确定这是否是最好的方法。它应该像 Foo 方法一样为 void 工作,像 Foo2 中的异步一样工作。

任何帮助都会很棒。

我的索引文件:

@page "/"

<div>
    <ActionButtonBar ActionButtons="Actbtns"></ActionButtonBar>
</div>

@code {

    List<ActionButton> Actbtns = new();

    protected override Task OnInitializedAsync()
    {
        var somebtns = new List<ActionButton>
        {
            new()
            {
                Title = "Action 1",
                ClickAction = Foo
            },
            new()
            {
                Title = "Action 2",
                ClickAction = async () => await Foo2()
            }
        };
        Actbtns.AddRange(somebtns);
        return base.OnInitializedAsync();
    }

    public void Foo() {}

    public async Task Foo2() {await Task.CompletedTask;}

}

ActionButtonBar 组件

<div id="button-group-container" class="btn-group" role="group" aria-label="Basic example">
    @foreach (var button in ActionButtons)
    {
        <button type="button" class="btn btn-info rounded-pill" onclick="@button.ClickAction">@button.Title</button>
    }
</div>

@code {

    [Parameter]
    public List<ActionButton> ActionButtons { get; set; } = new();

}

动作按钮

public class ActionButton : ComponentBase
    {
        public string Title { get; set; } = string.Empty;

        [Parameter]
        public Action? ClickAction {get; set;}

    }
asp.net-core components blazor-server-side
1个回答
0
投票

根据你的例子,

ActionButton
是一个单独的类,它不是一个组件,所以你不需要给它添加
[Parameter]
属性:

public class ActionButton : ComponentBase
{
    public string Title { get; set; } = string.Empty;

    //[Parameter]
    public Action? ClickAction { get; set; }
}

如果

[Parameter]
属性是必需的并且您的值不会更改,则可以忽略这些警告:

protected override Task OnInitializedAsync()
{
    //#pragma warning disable BL0005
    //...
    //#pragma warning restore BL0005
}

请注意,这并不能保证在渲染树中添加或删除组件不会产生副作用。

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