gpt4 book ai didi

asp.net-core - 如何强制 Blazor 重新渲染组件

转载 作者:行者123 更新时间:2023-12-02 07:08:30 29 4
gpt4 key购买 nike

我正在使用 Blazor(客户端)构建一个简单的 Web 应用程序,并且需要让 Blazor 重新渲染组件。有没有办法通知框架重新渲染?

在此 Razor 页面上,我有一个简单的复选框,用于显示用户是否向 Web 应用授予了特定权限。

ShouldRender() 始终返回 True。当 isGranted 字段设置为 True 时,不会呈现该复选框,并且保持未选中状态。

Razor 页面:

@page "/foo"
@inject IJSRuntime js

<input type="checkbox" disabled @bind="isGranted" /> Some Permission

@code {
bool isGranted;

protected override async Task OnInitAsync() {
await js.InvokeAsync<object>(
"foo.bar",
DotNetObjectRef.Create(this),
nameof(BarCallback)
);
}

[JSInvokable]
public void BarCallback(bool result) {
Console.WriteLine($"BarCallback(result: {result})");
isGranted = result;
}
protected override bool ShouldRender() {
Console.WriteLine("Blazor is checking for re-rendering...");
return true;
}
}

JavaScript 函数:

window.foo = {
bar: (dotnetObjRef, callback) => {
navigator.storage.persist()
.then(result => {
dotnetObjRef.invokeMethodAsync(callback, result)
.catch(reason => console.warn('Failed to call .NET method.', reason));
})
.catch(reason => console.warn('Failed to get permission.', reason));
}
}

Chrome 控制台中的输出:

WASM: Blazor is checking for re-rendering...
WASM: BarCallback(result: True)

.NET Core SDK:3.0.100-preview6-012264

Blazor 模板:Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview6.19307.2

最佳答案

通常,您可以通过调用 StateHasChanged 方法强制重新渲染。

要使此应用程序正常工作,您应该将 StateHasChanged(); 放置在 BarCallback 方法的末尾。

希望这有帮助。

关于asp.net-core - 如何强制 Blazor 重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839527/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com