`@void/solid`: `useParams()` keeps the first page's params after client-side navigation

Fechada
#708 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@yujiym já está trabalhando nisso.

Desde 4/11/2026.

  • #709 de @yujiym — aberto

Avaliação

Dificuldade
1/5
Tempo estimado
Menos de uma hora
Facilidade para iniciantes
20/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
typescript
Domínio
frontend

Direção de pesquisa

Read packages/solid/src/plugin-pages.ts around the ParamsContext.Provider and applyUpdate code referenced in the issue. The issue describes the stale context value and points to the existing in-place update for shared as a possible pattern; compare it with the fix in #709. Done means useParams() returns the current route params after navigation and browser back.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Problem

In a Solid pages app, useParams() keeps returning the params of the first page rendered, for the rest of the session. useRouter().params on the same page returns the correct values.

Reproduction

https://github.com/yujiym/void-solid-useparams-repro

pnpm install
pnpm dev
  1. Open /cards/xyz directly.
  2. Click Home, then /cards/abc.
  3. Click /cards/def.
  4. Press the browser's back button.
Step useParams().slug useRouter().params.slug
Load /cards/xyz directly xyz xyz
Home, then /cards/abc xyz (stale) abc
/cards/def from the card page xyz (stale) def
Browser back to /cards/abc xyz (stale) abc

The browser console shows no errors.

Expected behavior

useParams() returns the params of the current page, matching useRouter().params.

Cause

The generated Solid client provides the params like this (packages/solid/src/plugin-pages.ts):

createComponent(ParamsContext.Provider, {
  get value() { return routeParams(); },

Solid's context provider reads props.value inside untrack when it is created, so the getter doesn't subscribe to routeParams. The context keeps the first params object, even for pages created after a navigation.

useRouter().params reads the routeParams signal directly, which is why it stays correct.

Possible fix

Provide a stable createMutable object and update it in place in applyUpdate, as this file already does for shared. #610 fixed the same symptom in @void/svelte by updating its params object in place.

I'm happy to open a PR. Opened in #709.

Environment

  • void and @void/solid 1.6.1; the same provider code is on main at 5d2a2ff5
  • Also reproduced on 1.4.0 and 1.5.0
  • solid-js 1.9.18, Node 24, pnpm 11.20.0
  • vite dev, headless Chromium
Linguagem predominante
TypeScript
Estrelas
627
Forks
66
Merge médio
14h 17min
PRs com merge (30d)
200

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de voidzero-dev/void

Todas as issues de voidzero-dev/void

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.