Gotcha with ReactiveSet/Map iterators
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript
- Área
- frontend
Línea de trabajo
Comienza en packages/map/src/index.ts, líneas 49-55, y compara los métodos iteradores de ReactiveSet/Map con las implementaciones enlazadas de SvelteSet y Map. Usa la reproducción de StackBlitz para verificar que llamar a values(), keys() o items() sin consumir el iterador registra el seguimiento; se considera terminado cuando los cambios activan el efecto asíncrono según lo previsto.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
Using .keys(), .values() or .items() on a ReactiveSet or ReactiveMap is meant to track all keys/values for changes. However, if the iterators are not consumed, then no tracking is registered.
This comes up when trying to declare dependencies of an asynchronous effect beforehand.
createEffect(() => {
// Track set for changes
void set.values();
setTimeout(() => /* Use set contents... */);
});
Though the intention was to track the full content of the set, the above effect is not actually triggered by changes to the set.
The reason this happens is that the methods are implemented as generators like so:
The beginning of the method is not run until .next() is called for the first time.
I think the methods should not be generators themselves, rather just return super.values(). That would probably be more performant as well. SvelteSet & Map are implemented like this.
Happy to to write a PR if there is agreement.
Minimal Reproduction Link
https://stackblitz.com/edit/github-r2lfqdu4?file=src%2FApp.tsx
- Lenguaje dominante
- TypeScript
- Estrellas
- 1.6k
- Forks
- 162
- Merge medio
- 19 h 40 min
- PR fusionados (30 d)
- 8
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de solidjs-community/solid-primitives
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
solidjs-community/solid-primitives#1059 · 1 comentario ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
solidjs-community/solid-primitives#1000 · 3 comentarios · 5 reacciones ·
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Todos los issues de solidjs-community/solid-primitives
Issues similares
-
bug(cli): hapi doctor inline-media prints a fabricated B:\ helper-script path in packaged installs Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Crush Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
catppuccin/catppuccin#3125 ·
-
Add a SECURITY.md Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
ElementsProject/cln-application#167 · 1 comentario · 1 reacción ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Quantco/pnpm-licenses#17 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100