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

133
Vistas
El estado de reacción no cambia usando el paquete immer

Así que estoy increíblemente confundido, básicamente el mosaico debería volverse gris cuando hago clic en él, pero no es así. Estoy bastante seguro de que hice esto correctamente a menos que haya algo que me estoy perdiendo en la forma en que configuré el tipo en primer lugar. Lo que es aún más extraño es que, a veces, cuando voy a cambiar manualmente el estado a través de la extensión, de repente (solo para el único mosaico para el que cambié manualmente el estado), onClick funciona perfectamente. ¡Cualquier ayuda se agradece, gracias!

 import React, { useEffect, useState } from 'react'; import produce from 'immer'; import { Node } from './astar'; export default function Grid(): JSX.Element { const [grid, setGrid] = useState<Node[][]>([]); const numCols = 50; useEffect(() => { let tempGrid: Node[][] = []; for (let i = 0; i < numCols; i++) { tempGrid.push([]); } for (let i = 0; i < tempGrid.length; i++) { for (let j = 0; j < tempGrid.length / 2; j++) { let node = new Node(i, j, false); tempGrid[i][j] = node; } } setGrid(tempGrid); }, []); return ( <div style={{ display: 'grid', gridTemplateColumns: `repeat(${numCols}, 20px)` }}> {grid.map((rows, i) => { return ( <div key={i}> {rows.map((cols, j) => { return ( <div key={j} onClick={() => { const newGrid = produce(grid, (tempGrid) => { tempGrid[i][j].isWall = !tempGrid[i][j].isWall; }); setGrid(newGrid); console.log(grid[i][j]); }} style={{ width: '20px', height: '20px', border: '1px solid black', backgroundColor: grid[i][j].isWall ? '#A9A9A9' : '#FFFFFF' }} ></div> ); })} </div> ); })} </div> ); }

La clase de nodo

 class Node { x: number; y: number; isWall: boolean; constructor(x: number, y: number, isWall: boolean) { this.x = x; this.y = y; this.isWall = isWall; } } export { Node };

incluso cuando hago clic en él todavía no cambia el estado.

Imagen de ejemplo

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

0

Su clase de Node debe marcarse con immerable para que sea compatible con Immer:

 import {immerable} from "immer" class Node { [immerable] = true; //Add this line x: number; y: number; isWall: boolean; constructor(x: number, y: number, isWall: boolean) { this.x = x; this.y = y; this.isWall = isWall; } } export { Node };

https://immerjs.github.io/immer/complex-objects

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