Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1437. #ЗаметкиНаПолях #Blazor Вызываем Код JavaScript из Blazor WebAssembly Одна из серьезных проблем модернизации существующего или «устаревшего» кода заключается в том, насколько сложно начать работу, потому что код слишком сложен или объёмен. Рефакторинг и переписывание может стать проще, если вы можете интегрировать новый код с существующим устаревшим кодом, а затем медленно и итеративно мигрировать с течением времени. Сегодня рассмотрим, как из кода Blazor WASM вызвать JavaScript-функцию, которая будет примером некоторого существующего устаревшего кода. Допустим, у нас есть какая-то функция на Javascript:
var arg = 0;
function legacyFunction(arg) {
  var nxt = arg + 1;
  console.log(arg + ' > ' + nxt);
  return nxt;
}

Чтобы вызвать её в проекте Blazor WASM, нам потребуются 3 простых шага: 1) Добавить тег script со ссылкой на файл Javascript кода в файл шаблона страниц (например, index.html):
<script src="legacysample.js"></script>

2) На странице Razor-компонента внедрить JSRuntime:
@inject IJSRuntime JSRuntime

3) На странице Razor-компонента написать Blazor-функцию с вызовом Javascript кода с помощью JSRuntime:
var currentCount = 0;
...
async void IncrementCount()
{
  currentCount = await 
   JSRuntime.InvokeAsync<int>(
    "legacyFunction", currentCount);
}

На этом третьем и последнем шаге вы можете видеть, что currentCount использует вызов JSRuntime.InvokeAsync с целочисленным типом результата, возвращаемого JavaScript-функцией «legacyFunction», и currentCount, передаваемого в качестве аргумента. Обратите внимание, что метод был изменён на асинхронный для использования await, чтобы JSRuntime мог завершить InvokeAsync, прежде чем вернуть управление Razor-компоненту. Источник: https://dev.to/aztecconsulting/invoking-legacy-javascript-from-blazor-webassembly-using-the-jsruntime-1df3