Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

244
Views
Explicación: Obtener estado anterior

Estoy leyendo la Documentación de React y hay un tema que no entendí muy bien:

https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state

 function Counter() { const [count, setCount] = useState(0); const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; }); const prevCount = prevCountRef.current; return <h1>Now: {count}, before: {prevCount}</h1>; }

Manifestación:

https://codesandbox.io/s/get-previous-state-ref--hook-faq-w0f3k?file=/src/App.js

Me gustaría una mejor explicación sobre esto. Amable, ¿cómo funciona?. Gracias

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

useEffect se llama justo después de que el componente se renderice. La primera vez que el componente renderiza prevCount no está undefined porque aún no se ha llamado a useEffect.

procesamiento previo: 1) value: 0, prevCount: undefined

post-render: useEffect se llama:

2) value: 0, prevCount: 0 useRef no provoca una nueva representación, por lo que el componente no se actualiza. refCount se mostrará como indefinido.

cuando cambia el valor de conteo, el componente se vuelve a renderizar:

renderizado previo:

3) value: 1, prevCount: 0 todavía no se ha llamado a useEffect.

posprocesamiento:

4) value: 1, prevCount: 1 se llama a useEffect, prevCount aumentó pero el componente no se actualiza, por lo que se mostrará prevCount con el valor = 0;

about 4 years ago · Juan Pablo Isaza Report

0

Puede usar componentDidUpdate para obtener los accesorios y el estado anteriores. Cuando extiendas React.Component, llamará a componentDidUpdate después de cada procesamiento. Tú defines la función y React te pasará los accesorios anteriores y el estado anterior.

https://reactjs.org/docs/react-component.html#componentdidupdate

about 4 years ago · Juan Pablo Isaza Report

0

Hay tres piezas aquí. Un estado , una referencia y un efecto .

Un estado es un valor que se recuerda entre renderizaciones y vuelve a renderizar su componente cuando se cambia.

Una referencia (o ref ) es un valor que persiste entre los renderizados como lo hace el estado, pero a diferencia del estado, no se observa ningún cambio y se puede mutar libremente. Los cambios en las referencias nunca causan renderizaciones.

Un efecto es simplemente una función que se ejecuta después de un renderizado, o después de que un renderizado en una de sus dependencias haya cambiado desde el renderizado anterior.


Así que juntando eso, esto es lo que sucede:

 const [count, setCount] = useState(0);

Aquí se declara un estado. Llamar a setCount con un nuevo valor hará que el componente se represente y, cuando lo haga, count tendrá el valor establecido.

 const prevCountRef = useRef();

Luego declara la ref. Esto mantendrá una referencia al valor de conteo anterior. En este momento no tiene valor ( undefined ), lo que tiene sentido teniendo en cuenta que no hay un valor previo cuando el componente se procesa por primera vez.

 useEffect(() => { prevCountRef.current = count; });

Ahora declara un efecto que se ejecuta después de cada procesamiento (puedes saberlo porque no tiene dependencias (sería el segundo argumento para useEffect() ). Cuando se ejecuta, establece el valor actual de prevCountRef en el valor que sea.


Entonces, en el primer render, en pseudocódigo:

 // render starts count // 0 prevCountRef.current // undefined // render finishes effect runs { prevCountRef.current is set to 0 }

Entonces, cuando se está procesando, el estado de count es 0 y la referencia de conteo anterior no está undefined .


Segundo render:

 setCount(1) // triggers the second render // second render starts count // 1 prevCount.current // 0 // second render finishes effect runs { prevCount.current is set to 1 }

Entonces, como puede ver, durante el renderizado, siempre tiene el recuento actual como estado y el recuento anterior como referencia. Esto funciona porque el efecto que establece el valor de refs siempre se ejecuta después de que se realiza el renderizado, lo que permite que sea el valor anterior.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!