Incorporación de enlaces
Puede usar el enlace Effect para supervisar el estado de la aplicación y ejecutar código en respuesta a las actualizaciones. Registramos la función que queremos ejecutar en respuesta a los cambios mediante el uso de useEffect
.
Escenario
Nuestra aplicación permite al usuario pulsar en elementos individuales para marcarlos como preparados. Si aún no se han preparado algunos elementos, queremos mostrar el mensaje Siga cortando. Una vez finalizados todos los elementos, queremos mostrar Trabajo de preparación terminado.
Configuraremos este comportamiento agregando un nuevo objeto de estado. Actualizaremos el objeto desde el enlace Effect.
Importante
En nuestro ejemplo, modificamos el estado en useEffect
. De forma predeterminada, useEffect
se ejecuta siempre que se modifique cualquier objeto con estado. Este comportamiento puede crear un bucle sin fin. En este bucle, modificamos el estado y se ejecuta el enlace, que modifica el estado, que a su vez ejecuta el enlace, etc.
Para evitar el bucle sin fin, podemos usar el parámetro de dependencia en useEffect
a fin de ver solo un objeto. Haremos esto cuando creemos nuestro código.
Incorporación de la propiedad de estado nueva
Abra el archivo App.jsx.
Para agregar la nueva propiedad de estado, inserte el código siguiente debajo de la línea que lee,
TODO: Add new state property
.// TODO: Add new state property const [ prepared, setPrepared ] = useState(false);
Incorporación del cliente de escucha del enlace Effect
Para agregar el cliente de escucha del enlace Effect, inserte el código siguiente debajo de la línea que lee, TODO: Add the effect hook
.
// TODO: Add the effect hook
useEffect(() => {
setPrepared(recipe.ingredients.every(i => i.prepared));
}, [recipe]);
El código usa setPrepared
para actualizar prepared
. Usa el método every, que devuelve un valor booleano basado en cada elemento que coincida con los criterios especificados. En nuestro caso, vamos a comprobar si todos los elementos están preparados. En caso contrario, el método devuelve false.
El segundo parámetro en useEffect
está establecido en [recipe]
. Esta configuración proporciona la dependencia para asegurarse de que nuestro código se ejecuta solo cuando el objeto recipe
cambia.
Incorporación de la pantalla
Ahora, muestre el mensaje al usuario si se ha terminado el trabajo de preparación. Para ello, agregue el código siguiente después de la línea que lee, TODO: Add the prep work display
.
{/* TODO: Add the prep work display */}
{ prepared ? <h2>Prep work done!</h2> : <h2>Just keep chopping.</h2>}
Miramos el objeto prepared
. Si es true, se muestra Trabajo de preparación terminado. En caso contrario, se muestra Siga picando.
Prueba de la página
- Guarde todos los archivos.
- Vuelva al explorador y actualice la página.
- Seleccione los ingredientes para marcarlos como todos preparados. (Deben estar todos tachados de la lista). El texto se actualiza en la parte inferior de la página.