将React应用程序移植到Blazor应用程序,并使用JavaScript互操作导入JavaScript库



我目前有一个React应用程序,我正试图将其转换为Blazor WebAssembly应用程序。React应用程序有一个导入JavaScript库的组件,其示例代码可以在这里看到。导入的charting_library代码本身在没有授予访问权限的情况下是不可访问的,但这不应该是回答这个问题的问题。

在我的React应用程序中,根据示例代码,我有以下代码(为了简洁起见,去掉了(:

import { widget } from '../../charting_library/charting_library.min';
export class TVChartContainer extends React.PureComponent {
tvWidget = null;
componentDidMount() {
const widgetOptions = {
// Various properties set here.
};
const tvWidget = new widget(widgetOptions);
this.tvWidget = tvWidget;
}
render() {
return (
<div className={'TVChartContainer'} />
);
}
}

我读过关于Blazor组件和Blazor JavaScript互操作的文章,并试图用JavaScript互操作实现一个组件,以使用我正在使用的JavaScriptcharting_library,在Blazor中的方式与在我的React应用程序中的方式相同。因此,根据IJSRuntime上的说明,我在wwwroot下添加了charting_libraryJavaScript代码,并在index.html中添加了以下内容:

<script src="charting_library/charting_library.min.js"></script>

然后,我创建了一个简单的Blazor组件(ComponentsTradingViewChartComponent.razor(,开始了我认为的方法,但我有一种强烈的感觉,我走上了完全错误的轨道:

@inject IJSRuntime JSRuntime
<h3>TradingViewChartComponent</h3>
<div>
@DisplayTradingViewChart()
</div>
@code {
public async Task DisplayTradingViewChart()
{
await JSRuntime.InvokeVoidAsync("new widget()");
}
}

也不清楚我是如何在Index.razor中使用这个组件的。以下结果导致错误:

<TradingViewChartComponent />

错误为:

"发现具有意外名称'TradingViewChartComponent'的标记元素。如果这是一个组件,请为其命名空间添加@using指令。">

它指的是模板示例文件SurveyPrompt.razor。我不确定连接是如何建立的,但当其他代码构建时,这可能会自动解决?但事实并非如此,因为我收到了与jQuery相关的其他错误,如"找不到'jQuery'的类型定义文件。">这是在charting_library代码本身中,我想这在React应用程序中不是问题,因为用作Visual Studio React应用模板一部分的create-react-app添加了必要的依赖项,如jQuery。那么,如何在Blazor应用程序中确保这种依赖性呢?

这里的主要问题是,如何在Blazor应用程序中使用JavaScript库,就像我在React应用程序中一样?其他问题,如Index.razor中的Blazor组件和我遇到的jQuery错误,都是额外的问题,如果可以单独回答,则不需要在这里回答(我不介意为它们创建单独的问题(。

感谢任何人的帮助!我熟悉C#和React,但对Blazor来说是新手,而且我的JavaScript知识有限。

JavaScript组件和代码应该在Blazor应用程序呈现后执行。最合适的方法是从组件的生命周期事件OnAfterRender(bool-firstRender(和OnAfterRenderAsync(bool firstRender(中使用JSInterop

这段代码:await JSRuntime.InvokeVoidAsync("new widget()");,应该放在这两个方法中的一个方法中,并被自动调用,比如创建和初始化JavaScript小部件。

你创建了这个组件吗?<TradingViewChartComponent />我想没有,那么你怎么能试着使用它呢?没有这样的组件

当页面被呈现时,这个@DisplayTradingViewChart()调用DisplayTradingViewChart((方法。这可能会导致错误。再次使用上面的两种方法。

这里有一个答案链接,展示了如何在Blazor中使用JavaScript。

希望这能帮助。。。

相关内容

  • 没有找到相关文章

最新更新