Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

112
Vistas
¿Puede un objeto mutable en la tienda Redux que solo está mutado fuera de Redux causar efectos secundarios inesperados?

Ante esta situación:

  • Hay un objeto mutable dentro de la tienda Redux
  • Los reductores no mutan el objeto; todos los reductores siguen siendo funciones puras sin efectos secundarios
  • El objeto mutable a veces se muta fuera de Redux, por ejemplo, llamando a métodos en el objeto mismo

Mi pregunta es, ¿es "seguro" hacerlo, o podría haber efectos secundarios problemáticos, y si es así, qué y por qué? En particular, ¿puede esto afectar el rendimiento, puede alterar la forma en que Redux vuelve a calcular los estados y puede alterar la representación de los componentes de React si el objeto se les pasa desde la tienda de Redux como accesorio?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Nunca debe mutar los valores que están en el estado Redux, nunca :

  • https://redux.js.org/guia-de-estilo/guia-de-estilo#do-not-mutate-state

Esto puede causar y causará absolutamente efectos secundarios, incluida la posibilidad de que la aplicación no se reproduzca cuando sea necesario.

Si este "objeto mutable" al que te refieres es algún tipo de instancia de clase o similar, tampoco pertenece a la tienda Redux:

  • https://redux.js.org/style-guide/style-guide#do-not-put-non-serializable-values-in-state-or-actions

editar

Según la discusión en los comentarios, así es como sugeriría manejar algo como este contexto de WebGL:

 const SomeParentComponent = () => { // Use Redux state to decide when we should show this const showWebGl = useSelector(state => state.ui.showWebGl); // Standard hooks "forceRender" implementation const [, forceRender] = useReducer(c => c + 1, 0) // Ref to hold the WebGL instance const webGlRef = useRef(null); useLayoutEffect(() => { if (showWebGl) { webGlRef.current = magicallyCreateWebGlInstance(); forceRender(); // have to force a re-render to pass down the ref value } return () => { if (webGlRef.current) { magicallyDestroyWebGlInstance(webGlRef.current) } } }, [showWebGl]) return ( <MyWebGlContext.Provider value={webGlRef.current> <RestOfAppGoesHere /> </MyWebGlContext.Provider> ) }

La instancia de WebGL en sí no pertenece a la tienda, porque no es estatal y no es serializable. Una tienda Redux no debe usarse solo como una forma de entregar valores arbitrarios, especialmente si esos valores no son datos simples de JS.

De esta manera, el estado de Redux aún determina si la instancia de WebGL se está creando, pero la instancia en sí vive completamente en la capa de la interfaz de usuario y aún es accesible para el resto del árbol de componentes.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda