Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Pages: preserveState prevents the destination URL from being committed

Abierto
#506 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript, vite

Línea de trabajo

Start in packages/void/src/pages/navigation-engine.ts, especially makeCommit() and its history-writing condition, then trace how normal visits, router.refresh(), and back/forward navigation select commit behavior. Run the reported unit tests with vp test run and locate the shared-router regression tests. Done means preserveState visits update the URL, replace still replaces, refresh and history navigation add no entries, and tests cover state preservation and URL behavior.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Description

Calling router.visit('/settings', { preserveState: true }) updates the rendered page, but leaves the browser URL pointing to the previous page.

This appears to couple component state preservation with history updates.

Environment

  • Commit: 2ceab89154dc6e0c3fa5525f7bd4d1d5f3d0aa64
  • Package version in the repository: 1.1.12
  • Chromium Headless Shell: 134.0.6998.35
  • Playwright: 1.64.1

Steps to reproduce

  1. Start on /case.
  2. Navigate using:
await router.visit('/settings', {
  preserveState: true,
});
  1. Return a valid Pages response for /settings.
  2. Compare the rendered page with window.location.pathname.

Actual behavior

The destination page renders, but the address bar remains on /case.

In an isolated browser fixture using the production createVoidRouter():

Value Result
Rendered page /settings
window.location.pathname /case
router.path after the visit /case

This reproduced in all three browser runs. A direct regression test against the shared router also fails because history.pushState() is not called.

The unit tests were run with vp test run. The browser fixture was run separately through a Node.js script using Playwright; it was not run as an existing Void browser integration suite. The fixture exercises the actual client runtime with a small HTTP server; this was not a full production-build test across every adapter.

Expected behavior

The rendered page and browser URL should both reflect /settings.

preserveState should control component state preservation independently of whether a normal visit writes history. replace should continue to select between replacing and adding an entry.

Relevant implementation

In makeCommit(), history updates are skipped whenever preserveState is true:

if (!options.preserveState) {
  const historyUrl = commitTarget.fetchUrl + commitTarget.hash;
  scrollRestoration.writeHistory(historyUrl, !!options.replace);
}

Separating history-writing decisions from state preservation would also need to retain the existing behavior of router.refresh() and back/forward navigation, which should not add history entries.

Acceptance criteria

  • A normal visit with preserveState: true updates the destination URL.
  • replace: true replaces the current entry.
  • router.refresh() and back/forward navigation do not add entries.
  • Regression coverage checks both state preservation and URL/history behavior.
Lenguaje dominante
TypeScript
Estrellas
402
Forks
32
Merge medio
11 h 52 min
PR fusionados (30 d)
88

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de voidzero-dev/void

Todos los issues de voidzero-dev/void

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.