Es algo de lo que no te olvidas mientras estás en el ciclo de vida de tu componente, lo estás observando atentamente. Así que esto podría ser una suscripción o ver una transmisión en vivo de A Head of Lettuce o algo así. Un Efecto de Acción es algo donde lo ejecutas explícitamente, es disparar y olvidar, no te importa cuál sea el resultado final de eso, como el Brexit. Entonces, ¿para qué son los Efectos de Uso? Los Efectos de Uso, específicamente el hook, es para la sincronización con los Efectos de Actividad. No con los Efectos de Acción, sino con los Efectos de Actividad. Así que un ejemplo de esto es, por ejemplo, un oyente, un redimensionamiento, un movimiento del ratón, algo así, donde creas un manejador, añades ese manejador, y te aseguras de usar esa función de limpieza para decir, no quiero escuchar esto más. Y como las Actividades son cosas en curso, es algo así como ver la televisión donde no importa cuántas veces enciendas y apagues la TV, el canal seguirá emitiendo. No estás imponiendo ningún efecto secundario al encenderlo y apagarlo, no es como si apagaras la TV y la BBC dijera, bueno, cortemos, esta persona dejó de ver, no funciona de esa manera. Entonces, ¿dónde van los efectos de acción? Sabemos que realmente no podemos tener efectos secundarios en Render, y en realidad sí que puedes, pero no vamos a entrar en eso aquí. Sabemos que ponerlo en useEffect es incómodo, porque David lo dijo, pero ¿qué pasa con el exterior del componente? Esa es una idea. Entonces, ¿dónde van los efectos de acción? En realidad, van en los manejadores de eventos, o algo así. En este ejemplo tenemos un onSubmit, y estamos enviando los data directamente dentro de ese onSubmit, y te mostraré la alternativa más tarde. Pero el verdadero modelo mental es que quieres poner tu disparar y olvidar, tus efectos de acción lo más cerca posible del evento que habría causado el efecto. Y así es como esto ayuda con React 18. Sabemos que cuando algo cambia, nuestro componente va a re-renderizar, y si atamos ese efecto a la renderización, entonces React, recuerda, tiene la capacidad de seguir re-renderizando ese componente, y porque lo ataste a la renderización, va a seguir ejecutando esos efectos, lo cual realmente no queremos. Pero mueve el efecto más cerca del manejador de eventos, y evitas completamente ese problema, porque no lo estás atando a la renderización, lo estás atando al evento real que causó ese efecto para suceder. Así que los efectos de acción ocurren fuera de la renderización. Muy bien.
Así que aquí hay un ejemplo que en realidad pasa por bastantes problemas. Y yo he visto esto antes. Incluso lo he hecho. Hay una prop isFocused. Y así esta prop isFocused se asegura de que cuando enfocamos un componente, así isFocus iguala o escucha ese cambio de estado y así cuando ese estado cambia, vamos a ejecutar ese use effect que luego va a enfocar el evento. Así que hay mucha indirección aquí sólo para, ya sabes, conseguir que ese componente se enfoque y también hay una posibilidad de un estado imposible como qué pasa si tienes múltiples isFocused es verdadero. En resumen, isFocused realmente no debería ser una prop. Pero veamos cómo podemos refactorizar esto, al menos fuera de use effect. Así que en su lugar, podríamos usar un forward ref y podríamos consumir eso en los componentes donde tenemos este input ref igual a use ref. Y aunque esto es un input elegante, podríamos usar forward ref para agarrarlo. O si realmente quieres, usa imperative handle. No lo puse en las diapositivas porque no quiero que la gente lo capture y diga este tipo está recomendando usar imperative handle.
Comments