Ga naar hoofdinhoud

Navigation Blocking

Open in ChatGPT

Navigatieblokkering voegt een of meerdere lagen van controle toe aan de gehele onderliggende router-API. Als er blokkeringhandlers aanwezig zijn, wordt navigatie als volgt voorkomen:

Als de navigatie wordt geactiveerd door iets dat op routerniveau wordt gecontroleerd, kun je elke taak uitvoeren of een UI-prompt aan de gebruiker tonen om de actie te bevestigen. Elke component die de WillLeaveObserver in de routeboom implementeert, zal worden aangeroepen. De implementator moet accept aanroepen om de navigatie voort te zetten of reject om deze te blokkeren. Als meerdere componenten de WillLeaveObserver in de boom van de route implementeren, worden de veto-handlers sequentieel in omgekeerde volgorde uitgevoerd.

Praktisch Voorbeeld van Veto-Verwerking

Om te zien hoe vetoën in de praktijk werken, kijk naar de Voorbeelden van het gebruik van Lifecycle Observers

Voor pagina-evenementen die niet rechtstreeks kunnen worden gecontroleerd, interfereert de router niet of handhaaft geen specifiek gedrag. Ontwikkelaars kunnen echter nog steeds luisteren naar het beforeunload evenement om een laatste poging te doen om de gebruiker te waarschuwen voor niet-opgeslagen gegevens indien nodig.

PageEventOptions options = new PageEventOptions();
options.setCode("""
event.preventDefault();
return true;
""");
Page.getCurrent().addEventListener("beforeunload", e -> {}, options);

Terugknop van de browser

De terugknop werkt buiten de controle van webtoepassingen, waardoor het moeilijk is om de actie consistent in alle browsers te onderscheppen of te voorkomen. In plaats van te proberen de terugknop te blokkeren, is het effectiever om je UI/UX zo te ontwerpen dat de impact wordt verminderd. Overweeg strategieën zoals het opslaan van niet-opgeslagen gegevens in sessie-opslag, zodat als een gebruiker weg navigeert en terugkeert, hun voortgang veilig wordt hersteld. Deze aanpak zorgt voor gegevensbescherming zonder te vertrouwen op onbetrouwbaar browsergedrag.