首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制Blazor重新呈现组件

如何强制Blazor重新呈现组件
EN

Stack Overflow用户
提问于 2019-07-02 00:55:57
回答 2查看 28K关注 0票数 21

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

在这个Razor页面上,我有一个简单的复选框,显示web应用程序是否被用户授予了特定的权限。

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

剃刀页面:

代码语言:javascript
复制
@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函数:

代码语言: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控制台中的输出:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-02 01:25:54

通常,通过调用StateHasChanged方法强制重新呈现。

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

希望这能有所帮助。

票数 25
EN

Stack Overflow用户

发布于 2019-07-02 01:27:27

只需从输入控件中删除disabled,它就会正常工作。更改:

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

出自:

<input type="checkbox" @bind="isGranted" />

blazorfiddle查看您的代码工作情况

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56839527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档