• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

218
Views
Reaccionar filtrar publicaciones firebase

Ante un problema, cuando cambias a una página de publicaciones, todas las publicaciones están ocultas y solo al presionar el botón

 `<li onClick={()=> setFiltered(posts)}><a>All</a><span></span></li>`

muestra todas las publicaciones, aunque todas las publicaciones deben mostrarse inmediatamente cuando ingresa a la página. Pero el filtro funciona bien, ¿puede señalar dónde cometí un error? En todo caso, envío las publicaciones desde firebase.

Funciones

 const [posts, setPosts] = useState([]); const [filtered, setFiltered] = useState([]); const postsCollectionRef = collection(db , "posts"); const menuItems = [...new Set(posts.map((Val) => Val.category))]; useEffect(() => { const getPosts = async () => { const data = await getDocs(postsCollectionRef); setPosts(data.docs.map((doc) => ({...doc.data(), id: doc.id}))); setFiltered(posts); } getPosts(); }, []) // filter function const filterItem = (category) => { const newItem = posts.filter(newVal => newVal.category === category); setFiltered(newItem); };

Categoría de botones

 <li onClick={()=> setFiltered(posts)}><a>All</a><span></span></li> { menuItems.map((Val, id)=>{ return <li key={id} onClick={()=> filterItem(Val)}><a>{Val}</a><span></span></li> })}

Mensajes de salida

 <div className="gallery-row"> { filtered.map((posts, i) => { return( <Link key={i} to={'/product/' + posts.id}>Post</Link>) })} </div>
about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Cuando se llama a setFiltered dentro de useEffect, el valor de las posts sigue siendo [] , el valor inicial. El problema que está experimentando se llama cierres obsoletos.

En muchos casos, esto se puede solucionar agregando el valor obsoleto a la matriz de dependencias de useEffect, pero en su caso, eso crearía un bucle infinito.

Según su código, la solución más simple es la siguiente:

 useEffect(() => { const getPosts = async () => { const data = await getDocs(postsCollectionRef); const posts = data.docs.map((doc) => ({...doc.data(), id: doc.id})); setPosts(posts); setFiltered(posts); } getPosts(); }, [])

about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error