`@void/solid`: `useParams()` keeps the first page's params after client-side navigation
Mantenedores costumam responder em até 1 dia
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
- Open
/cards/xyzdirectly. - Click Home, then /cards/abc.
- Click /cards/def.
- 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
voidand@void/solid1.6.1; the same provider code is onmainat 5d2a2ff5- Also reproduced on 1.4.0 and 1.5.0
solid-js1.9.18, Node 24, pnpm 11.20.0vite 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
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de voidzero-dev/void
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
voidzero-dev/void#718 · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
voidzero-dev/void#717 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 28/100
voidzero-dev/void#692 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 30/100
voidzero-dev/void#689 ·
Mantenedores costumam responder em até 1 dia
-
`withValidator({ body })` rejects the multipart bodies that `useForm` and `action()` send for filesAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
voidzero-dev/void#679 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de voidzero-dev/void
Issues semelhantes
-
cloudflare-cache-binding: `unstorage://` keys are rejected by the Cache API, cache never storesAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 3 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
Mantenedores costumam responder em até 2 dias
-
desktop: pasted image breaks and send fails with "Failed to fetch" after the clipboard temp file is deletedTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertareproduced
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
anomalyco/opencode#62052 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
strapi/design-system#2084 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 1 dia