我正在使用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
@bind="isGranted"
或@bind="@isGranted"
没有区别,两者都可以正常工作。 - Poulad