¿Cómo podemos comunicar estados entre componentes en React?
Dominar la comunicación de estados entre componentes es crucial para cualquier desarrollador de React. Aprender a interactuar los componentes mamá con sus componentes hijos te permitirá crear aplicaciones más dinámicas y robustas. En la clase anterior, se trabajó en cómo transmitir estados y en la creación de estados derivados que permiten filtrar o calcular información relevante para otros componentes en la aplicación.
¿Cómo implementamos un buscador de 'todos' eficiente?
Para que los usuarios puedan buscar tareas ('todos') dentro de nuestra lista, necesitamos crear un estado derivado que denominaremos SearchedTodos
. Este estado permitirá filtrar las tareas según el texto ingresado por el usuario en el buscador.
Código para crear el estado derivado
Usaremos el método filter
en los arrays para seleccionar solo los todos
que contengan el valor del estado searchValue
. Así se elabora el nuevo estado derivado:
const searchedTodos = todos.filter(todo =>
todo.text.toLowerCase().includes(searchValue.toLowerCase())
);
Aquí, estamos haciendo:
- Normalización a minúsculas: Esto nos asegura de que el filtrado no sea sensible a mayúsculas y minúsculas.
Renderizar el estado derivado
En lugar de renderizar directamente el array de todos
por defecto, ahora debemos asegurar que la lista muestre solo los resultados filtrados que coincidan con el valor de búsqueda del usuario:
return (
<TodoList todos={searchedTodos} />
);
¿Qué errores comunes podemos encontrar y cómo los solucionamos?
Un error típico es omitir el return
necesario dentro del filtro, sin el cual el nuevo array de searchedTodos
no se generaría correctamente. Este detalle resaltado en la clase muestra la importancia de incluir return
para devolver el valor booleano que dictamina si un todo
específico permanecerá en el nuevo array derivado.
Además, para mejorar la legibilidad del código, se recomienda descomponer las funciones largas en variables auxiliares. Por ejemplo:
const todoText = todo.text.toLowerCase();
const searchText = searchValue.toLowerCase();
return todoText.includes(searchText);
Esta práctica no solo mejora la claridad, sino también la mantenibilidad del código.
¿Cómo se mejora la interacción del usuario en la aplicación?
Modificar la lista de 'todos' para que se ajuste dinámicamente con las búsquedas del usuario logra que la aplicación parezca más viva e interactiva. El próximo paso incluirá permitir completar o eliminar tareas, utilizando el actualizador del estado setTodos
.
Se invita a los estudiantes a intentar implementar esta funcionalidad por sí mismos. El reto es lograr que, al interactuar con un componente todoItem
, se afecte el estado de todos los todos
, propiciando cambios en toda la aplicación. Esto incluye:
- Emparejar el estado: Vincular los botones de completar o eliminar con los elementos específicos a los que corresponden.
- Actualizar el estado global: Usar
setTodos
para que refleje los cambios en la lista y en otros componentes como todoCounter
y todoSearch
.
¡No importa si no logras terminarlo por completo! Lo importante es el aprendizaje adquirido al intentar resolverlo. Comparte tus hallazgos y experimentos en los comentarios.
Sigue adelante con tu aprendizaje y persiste en tu curiosidad técnica. La próxima clase te mostrará cómo realizar cada paso. ¡Nos vemos allí!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?