我想使用Blazor,最好是服务器端。我还想使用、重用我现有的主题和视觉设计,但这次包括使用很棒的javascript库,通过编程修改DOM来实现它们的效果。
据我所知,Blazor使用虚拟DOM。我不明白的是,如果任何javascript代码在Blazors后面修改真实DOM,那么虚拟DOM怎么能与真实DOM同步。
我能想象的唯一方法是,如果Blazor内置了一个机制来处理这种情况,然而,即使Blazor出现多年后,我也看不到它的记录,我所谈论的问题似乎甚至不是谷歌搜索中的话题。
问题
有什么方法可以将Blazor与正在修改DOM的javascript库一起使用吗?我的意思是,Blazor是否有任何内置机制来处理这一问题,或者如果没有,是否有任何常见的最佳实践?
来自文档:
与文档对象模型(DOM(的交互
只有当该对象不会与Blazor交互。Blazor坚持DOM的表示,并直接与DOM对象交互。如果Blazor呈现的元素在外部直接使用JS进行修改或者通过JS Interop,DOM可能不再匹配Blazor的内部表示,这可能导致未定义的行为。未定义行为可能仅仅干扰元素的呈现,或者它们的功能,但也可能给应用程序或服务器
本指南不仅适用于您自己的JS互操作代码,还适用于应用程序使用的任何JS库,包括第三方框架,如BootstrapJS和jQuery。
在一些文档示例中,JS interop用于对元素纯粹是为了作为示例的一部分进行演示。在里面在这些情况下,文本中会出现警告。
有关详细信息,请参阅从.NET方法调用JavaScript函数在ASP.NET Core Blazor中。