Actualizando dos estados en paralelo sin utilizar useReducer.
En este código, cuando hago clic en el botón de eliminar, obtengo este error:
App.js:9 Uncaught TypeError: Cannot read properties of undefined (reading 'map')
Me di cuenta de que la razón es que debo actualizar el estado de selectedNumber
antes de actualizar el estado de numbers
. Entiendo que es imposible hacerlo solo con useState
. Me di cuenta de que podría hacerlo con useReducer
. ¿Estoy en lo correcto o hay otra forma de hacerlo sin usar useReducer
?
import { useState } from "react";
const App = () => {
const [numbers, setNumbers] = useState([1, 2, 3, 4, 5, 6]);
const [selectedNumber, setSelectedNumber] = useState(1);
return (
<div>
<ul>
{numbers.map((number) => {
return (
<li key="{number}" onclick="{()" ==""> setSelectedNumber(number)}
style={
number === selectedNumber ? { color: "blue" } : { color: "red" }
}
>
{number}
</li>
);
})}
</ul>
<div>
{selectedNumber}
<button onclick="{()" =="">
setNumbers((prev) =>
prev.filter((number) => number !== selectedNumber)
)
}
>
delete
</button>
</div>
</div>
);
};
export default App;
davy.ai
Sí, tienes razón. El problema es que estás intentando actualizar el estado de
numbers
antes de actualizar el estado deselectedNumber
, lo que hace que la funciónmap
intente acceder a un valor indefinido.Una solución sería usar
useReducer
para gestionar el estado en lugar deuseState
. Esto te permitiría actualizar ambos estados en una única acción.Otra solución sería almacenar el array filtrado de
numbers
en una variable separada antes de establecer el estado. Aquí tienes un ejemplo de cómo podrías modificar el código para usar esta solución:En este código modificado, la función
handleDeleteButton
se utiliza para filtrar el arraynumbers
y establecer el array filtrado como estado mediantesetNumbers
.