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

Gotcha with ReactiveSet/Map iterators

Abierto
#830 2 comentarios 0 reacciones 0 asignados Ver en GitHub

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

help wanted
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:

https://github.com/solidjs-community/solid-primitives/blob/507ff661656cd51e3c280d0776054f487f0507de/packages/map/src/index.ts#L49-L55

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

Abrir la guía de contribución

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 solidjs-community/solid-primitives

Todos los issues de solidjs-community/solid-primitives

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.