我正在使用Blazor (客户端)构建一个简单的web应用程序,需要让Blazor重新渲染组件。有没有办法通知框架重新渲染?
在这个Razor页面上,我有一个简单的复选框,显示web应用程序是否被用户授予了特定的权限。
ShouldRender()始终返回True。当isGranted字段设置为True时,复选框不会呈现,并且保持未选中状态。
剃刀页面:
@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核心开发工具包:3.0.100-preview6-012264
Blazor模板:Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview6.19307.2
发布于 2019-07-02 01:25:54
通常,通过调用StateHasChanged方法强制重新呈现。
要使此应用程序正常工作,您应该将StateHasChanged();放在BarCallback方法的末尾。
希望这能有所帮助。
发布于 2019-07-02 01:27:27
只需从输入控件中删除disabled,它就会正常工作。更改:
<input type="checkbox" disabled @bind="isGranted" />
出自:
<input type="checkbox" @bind="isGranted" />
在blazorfiddle查看您的代码工作情况
https://stackoverflow.com/questions/56839527
复制相似问题