Blazor O registo personalizado de eventos é lançado quando o nome corresponde a um evento do navegador

O Blazor API de JavaScript Blazor.registerCustomEventType agora gera um erro quando o nome do evento personalizado corresponde à opção browserEventName. Registar um evento personalizado com o mesmo nome do evento subjacente do navegador fazia com que o evento disparasse duas vezes por cada ação do utilizador.

Versão introduzida

.NET 11

Comportamento anterior

Anteriormente, podia invocar Blazor.registerCustomEventType com um eventName igual à opção browserEventName. A chamada teve sucesso silenciosamente, mas cada evento do navegador com esse nome causava duas invocações EventCallback no lado .NET: uma para o evento nativo do navegador e outra para o wrapper de evento personalizado que relançava o mesmo nome.

// This used to silently double-fire the event.
Blazor.registerCustomEventType('scrolltop', {
    browserEventName: 'scrolltop'
});

Novo comportamento

A partir de ASP.NET Core 11, Blazor.registerCustomEventType lança quando eventName é igual a options.browserEventName:

// This now throws synchronously.
Blazor.registerCustomEventType('scrolltop', {
    browserEventName: 'scrolltop'
});

Para envolver um evento de navegador num evento personalizado sem a colisão, dê ao evento personalizado um nome diferente:

Blazor.registerCustomEventType('customscroll', {
    browserEventName: 'scrolltop'
});

Tipo de mudança disruptiva

Esta alteração é de natureza comportamental .

Motivo da mudança

Dar a Blazor.registerCustomEventType o mesmo nome tanto para eventos personalizados como para eventos do navegador era quase sempre um erro, que provocava um acionamento duplo incorreto sem dar qualquer aviso. A nova validação revela o erro no momento do registo. Para mais informações, veja dotnet/aspnetcore#64774.

Se o seu código chamar Blazor.registerCustomEventType com um nome personalizado igual ao evento subjacente do navegador, renomeie o evento personalizado para qualquer outro nome (uma convenção comum é adicionar um prefixo como custom ou o nome da sua biblioteca de componentes):

Blazor.registerCustomEventType('lib-scroll', {
    browserEventName: 'scrolltop'
});

Depois atualiza o atributo correspondente [EventHandler] ou a diretiva @on* no lado .NET para usar o novo nome.

APIs afetadas

Nenhum. Blazor.registerCustomEventType é um API de JavaScript; não é apresentado através do modelo de objetos .NET. Para mais informações, consulte eventos personalizados em Blazor.