Я новичок в Blazor и пытаюсь понять, как Blazor отображает компоненты в HTML-теги. Если я использую простой компонент вроде этого:
<InputText @bind-Value = "testvalue" id = "sample-textbox"></InputText>
@code {
public string testvalue = "abc123";
}
Затем я запускаю свое приложение, открываю инструменты разработки, получаю такой HTML-код:
<input id = "sample-textbox" _bl_e4f3714a-7294-49f4-9c79-90762626ed41 = "">
Какова цель _bl_e4f3714a-7294-49f4-9c79-90762626ed41
?
Это просто идентификатор, который Blazor использует для управления элементами DOM точно так же, как это делают другие платформы и библиотеки.
Другие платформы используют Virtual DOMS, и идентификатор не виден, когда элементы визуализируются.
Например, Angular использует такие идентификаторы:
<div _ngcontent-ng-c1557778241 = "" class = "scrollable guidance-carousel">
Дополнительное примечание: Blazor использует этот пользовательский атрибут для идентификации элемента без необходимости перехватывать значение id
элемента.
Я не смог найти многого в Google. Не могли бы вы оставить здесь комментарий, где я смогу прочитать дальше? Спасибо!
Добавлю сюда несколько центов: есть ветка на github с комментарием об этом. Я процитирую здесь только соответствующую часть:
Атрибуты
_bl_*
добавляются клиентским JS-кодом для интерактивно отображаемых элементов, имеющих@ref
. Атрибуты отсутствуют в исходном HTML.
Таким образом, если вы используете только SSR, вы вообще не увидите эти атрибуты (поскольку элементы, предназначенные только для SSR, не отображаются в интерактивном режиме).
Таким образом, этот атрибут является чем-то «очень внутренним» для механизмов Blazor.
Это может быть частью CSS-изоляции, хотя там упоминается немного другой формат имени (b-{string}).