В настоящее время у меня есть приложение 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 interop и пытался реализовать компонент с JavaScript-взаимодействиемиспользовать JavaScript charting_library
, который я использую, таким же образом в Blazor, как и в моем приложении React. Итак, согласно инструкциям для IJSRuntime
, я добавил charting_library
код JavaScript в wwwroot
и добавил следующее к index.html
:
<script src="charting_library/charting_library.min.js"></script>
IЗатем я создал простой компонент Blazor (Components\TradingViewChartComponent.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, поскольку create-react-app
, который использовался как часть шаблона приложения Visual Studio React, добавляет необходимые зависимости, такие как jQuery. Так как же обеспечить такие зависимости в приложении Blazor?
Главный вопрос здесь состоит в том, как использовать библиотеку JavaScript в приложении Blazor так же, как я использовал ее в приложении React? Дополнительные проблемы, такие как включение компонента Blazor в Index.razor
и ошибка jQuery, которую я получаю, - это бонусные вопросы, на которые нет необходимости отвечать здесь, если на них можно ответить отдельно (я не против создавать для них отдельные вопросы). ).
Спасибо за любую помощь! Я знаком с C # и React, но плохо знаком с Blazor, и мои знания JavaScript ограничены.