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

158
Vistas
.push() no está actualizando la variable

Estoy tratando de enviar los datos que se configuran usando la función setData a datas[]. Puedo enviar los datos una vez, pero la segunda vez que los envío, en lugar de almacenarse en datas[1], reemplaza datas[0]. Qué estoy haciendo mal aquí. Gracias de antemano.

 export default function App() { const [data,setData]= useState([]); const [activity, setActivity]= useState([]) const [name, setName] = useState("") const datas=[]; useEffect(()=>{ // handlePress() }, [setData, setName]) const rand= Math.floor(Math.random(1,5)*4)+1 const events=["Event A","Event B","Event C","Event D","Event E"] const handlePress=(day)=>{ setData(day); setName(`${events[rand]}`) datas.push(data); console.log(datas); } return ( <div className="App"> <Calendar onDayPress={day => { {handlePress(day)} }} /> </div> ); }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

la matriz de datas se agrega dentro del componente. Cada vez que el componente se vuelve a renderizar, se reinicializa para vaciar la matriz.

Además, en onDayPress prop en la función de devolución de llamada, ha agregado un par adicional de corchetes

about 4 years ago · Juan Pablo Isaza Denunciar

0

La App se vuelve a renderizar cada vez que cambia de estado, por lo que const datas=[]; se inicializará como una nueva matriz.

Un problema más que puedo prever es que llame a setData(day) y luego llame a datas.push(data) en la misma función que no se aplicará con sus datos más recientes porque los cambios de estado son asíncronos

 const handlePress=(day)=>{ setData(day); //`day` is set here but not applied immediately setName(`${events[rand]}`) datas.push(data); //data is the previous data, not `day` console.log(datas); }

La modificación completa puede ser

 const datas=[]; //move your `datas` to the global scope export default function App() { const [data,setData]= useState([]); const [activity, setActivity]= useState([]) const [name, setName] = useState("") useEffect(()=>{ // handlePress() }, [setData, setName]) const rand= Math.floor(Math.random(1,5)*4)+1 const events=["Event A","Event B","Event C","Event D","Event E"] const handlePress=(day)=>{ setData(day); //`data` will be changed later setName(`${events[rand]}`) datas.push(day); //push `day` directly instead of data console.log(datas); } return ( <div className="App"> <Calendar onDayPress={day => { {handlePress(day)} }} /> </div> ); }

Tampoco debe usar useEffect con setters ( setData y setName ). Estos setters no tienen nada que ver con los efectos secundarios. Debe pasar valores de estado como dependencias en useEffect .

 //whenever `name` or `data` change, `useEffect` will be triggered useEffect(()=>{ //TODO: Do your logic here }, [data, name])
about 4 years ago · Juan Pablo Isaza Denunciar

0

En reaccionar, cuando actualiza el estado, el componente de reacción se vuelve a procesar. Entonces, aquí, cuando actualiza el estado en la función handlePress (), su componente se vuelve a procesar. Por lo tanto, su matriz de datos se reinicializa y vuelve a estar vacía. Entonces, cada vez que presione un elemento, se agregará a la primera posición. Espero que te ayude.

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