我目前有一个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_library
JavaScript代码,并在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。
希望这能帮助。。。