Contenido del curso
Reactividad a profundidad
- 6

Qué es la reactividad en Solid
05:15 min - 7

Creación de una Librería Reactiva MiniSolid desde Cero
06:46 min - 8

Implementación de Signals en Librería Reactiva Solid
07:01 min - 9

Cómo createEffect conecta signals y efectos
08:50 min - 10

Señales derivadas sin nuevas primitivas
04:40 min - 11

createMemo para evitar renderizados innecesarios
07:26 min - 12

Cómo Solid convierte JSX al DOM real
03:53 min
Renderizado en Solid
Reactividad en Listas
Componentes
Función produce para mutar stores en Solid
Resumen
La función produce en SolidJS te permite modificar stores complejos usando sintaxis de JavaScript puro, sin perder reactividad. Es una utilidad pensada para quienes vienen del mundo JS y quieren escribir código más legible al actualizar arreglos y objetos anidados dentro de un store.
¿Qué es produce en SolidJS y por qué importa?
Produce es un helper interno que se importa desde el módulo solid-js/store. Se pasa directamente al setter del store y te da acceso al objeto subyacente para mutarlo como si fuera un objeto JavaScript común.
¿Qué hace produce en un store de Solid? Recibe el objeto interno del store y te deja modificarlo in place con sintaxis JS estándar, manteniendo la reactividad sin necesidad de spreads ni copias manuales.
Aunque hoy es opcional, en el futuro será la forma por defecto de trabajar con setters de stores cuando uses la sintaxis de funciones. Esto la convierte en una habilidad clave si estás construyendo aplicaciones reactivas con Solid.
¿Cómo modificar un elemento de una lista con produce?
Imagina que tienes una lista de todos y quieres alternar la propiedad completed de un ítem. Con produce, accedes al arreglo por índice y modificas la propiedad directamente.
js setTodos(produce((todos) => { todos[index].completed = !todos[index].completed; }));
Este cambio de mentalidad es lo que hace cómodo el flujo: en vez de reconstruir el arreglo, mutas el valor como lo harías en JavaScript vainilla. Lo mismo aplica al editar el texto de un ítem dentro de un evento onBlur, donde puedes asignar todos[index].text = e.target.innerText sin más vueltas.
¿Dónde puedes aplicar produce dentro de tu app?
En cualquier lugar donde tengas un setter de store. Algunos ejemplos prácticos del flujo de trabajo:
- Alternar el estado
completedde un ítem en la lista. - Editar el texto de un todo al perder el foco con
onBlur. - Agregar nuevos elementos a la lista usando
push. - Eliminar elementos con
spliceen lugar defilter.
Cada uno de estos casos se vuelve más expresivo porque trabajas directamente con el arreglo, no con copias.
¿Cómo agregar y eliminar elementos con produce?
Para agregar un nuevo todo, en lugar de modificar un índice manualmente, usas push directo sobre la lista que produce te entrega.
js setTodos(produce((todos) => { todos.push({ text: newItem, completed: false }); }));
Y para eliminar, en lugar de un filter que reconstruye el arreglo entero, aprovechas splice para quitar el elemento en su posición original.
js setTodos(produce((todos) => { todos.splice(index, 1); }));
¿Cuándo usar splice en vez de filter en un store? Cuando trabajas con produce y quieres mutar la lista in place. Splice elimina el elemento directamente sin crear un arreglo nuevo, lo que resulta más legible y suele ser más eficiente.
La diferencia es notoria al leer el código: mientras filter exige procesar la lógica completa para entender qué pasa, splice dentro de produce comunica la intención de inmediato.
¿Qué ganas al usar produce en términos de ergonomía?
La ventaja principal es la cercanía con JavaScript puro. Si ya manejas arrays con push, splice o asignaciones por índice, no necesitas aprender una sintaxis especial para mutar stores.
- Código más legible y directo, sin envoltorios extra.
- Sintaxis JS estándar para datos complejos como arrays y objetos anidados.
- Mejor experiencia de desarrollo al evitar reconstruir estructuras enteras.
- Compatibilidad con la dirección futura de SolidJS, que apunta a produce como opción por defecto.
¿Produce reemplaza al setter tradicional del store? No por ahora. Es una alternativa opcional, pero está previsto que se convierta en la forma estándar de trabajar con setters de funciones en versiones futuras.
Al ejecutar la aplicación con estos cambios, todo sigue funcionando igual: los checked, los cambios de estado, agregar y quitar ítems, y la edición de valores. La diferencia está en cómo se ve y se mantiene el código.
¿Qué sigue después de dominar produce?
Con produce dominado, ya tienes una base sólida sobre reactividad en listas y estructuras complejas en Solid. El siguiente paso es trabajar la arquitectura de tu aplicación para mejorar la legibilidad y la reutilización de componentes.
¿Ya probaste reescribir alguno de tus setters con produce? Cuéntame en los comentarios qué función de array te resultó más útil al migrar tu código.