Esto no lo han explicado mucho pero al useEffect se le puede enviar un return que sirve para limpiar los estados cuando el componente se desmonta
por ejemplo cuando cambiamos de la ruta del Home a la ruta de MyOrders, se desmonta Home, para monta MyOrders
el useEffect tiene la siguiente estructura
useEffect(() => {
//codigo que va a ejecutar
first
//funcion que sirve para limpiar cuando el componente es desmontado
return () => {
second
}
//las dependencias del useEffect
}, [third])
en el caso de la clase y con el codigo de la profesora el useEffect seria
useEffect(() => {
if (searchByTitle && searchByCategory) setFilteredItems(filterBy('BY_TITLE_AND_CATEGORY', items, searchByTitle, searchByCategory))
if (searchByTitle && !searchByCategory) setFilteredItems(filterBy('BY_TITLE', items, searchByTitle, searchByCategory))
if (!searchByTitle && searchByCategory) setFilteredItems(filterBy('BY_CATEGORY', items, searchByTitle, searchByCategory))
if (!searchByTitle && !searchByCategory) setFilteredItems(filterBy(null, items, searchByTitle, searchByCategory))
return () => {
setSearchByTitle(null)
}
}, [items, searchByTitle, searchByCategory])
asi se aseguran que el input se limpie al cambiar de ruta, la profe solo lo uso al hace checkout, pero que pasa si entras directamente a myOrders o my account desde la navegacion, el input se mantendra, aunque eso pertenece a la logica de negocio, a lo mejor si se quiere que funcione asi el codigo, igual espero que les sirva este aporte
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?