无论如何都要防止OnAfterRenderAsync在Blazor中运行每次渲染的JS函数?



我在我的blazor应用程序中调用jquery乐趣。我在Onin中做一些服务-我想在我的razor组件中调用此函数。我确实在组件中使用了以下代码。该函数显示页面何时加载完成。但是当我点击或改变页面上的任何值时,即使是改变与函数无关的文本,函数每次都存在。有提示吗?

protected override  void OnAfterRender(bool firstRender)
{


if(!firstRender)
{
await JsRuntime.InvokeVoidAsync("TextArea.AddLineToTextArea");

}   

你可能想知道为什么我放(!firstRender),原因是默认情况下,firstRender是假的,我不知道原因。有些人说,根据这个Blazor组件引用Null在第一次渲染,如果你的组件在if/else它会导致这个问题。但我的在外面

这里是我的功能是添加一个linenumber到textarea。

window.TextArea = {

AddLineToTextArea:function(){
$(".lined").linedtextarea(
{selectedLine: 1}
);

// Target a single one
$("#inpDefinition").linedtextarea();
}
}

如果你把If条件反过来,你应该得到你需要的:

protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
await JsRuntime.InvokeVoidAsync("TextArea.AddLineToTextArea");
}
}

这段代码意味着awaitJsRuntime.InvokeVoidAsync("TextArea.AddLineToTextArea");语句将只在组件第一次呈现时执行一次。

方法OnAfterRender在每次组件更新时执行,例如用户单击按钮或其他操作。但是布尔参数firstRender在第一次渲染时等于true,之后将为false。

最新更新