Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

86
Vistas
¿Cómo obtener correctamente los datos sobre el clic del usuario?

Estoy tratando de mostrar un menú con tres etiquetas Streaming , On Tv y In Theaters similar a lo que puedes encontrar en https://www.themoviedb.org/

Los datos predeterminados que se muestran son la sección Streaming , que recibe JSON de getStaticProps . Solo quiero obtener los puntos finales On Tv y In Theaters si el usuario hace clic en ellos y luego almacenar esa información en caché. Este es mi código hasta ahora (solo On Tv , aunque In theaters sería lo mismo):

 import useSWR from 'swr' import React, { useState } from "react"; const fetcher = async (e) => { const res = await fetch(e); const data = await res.json(); return data }; const Trending = ({data}) => { const [media, setMedia] = useState(data); //data used to display shows/movies const [onTv, setOnTv] = useState(null); const [shouldFetchTv, setShouldFetchTv] = useState(false); const urls = [ `https://api.themoviedb.org/3/tv/on_the_air?api_key=${process.env.NEXT_PUBLIC_API_KEY}&language=en-US&page=1`, `https://api.themoviedb.org/3/movie/now_playing?api_key=${process.env.NEXT_PUBLIC_API_KEY}&language=en-US&page=1&region=US` ] const tv = useSWR(shouldFetchTv && urls[0], fetcher); const tvResult = tv.data; const handleTv = () => { onTv ? setMedia(onTv) //if onTv has data then just set it : setShouldFetchTv(true); //fetches endpoint on users click setOnTv(tvResult); // caches the data setMedia(onTv); //sets media object with the cached data } (...Some more code) <div onClick={handleTv}> <h1>On Tv</h1> </div>

El problema es que el objeto onTv no se define correctamente en el primer clic, sino en el tercero. He estado tratando de implementar useEffect sin ningún efecto (sin juego de palabras), pero todavía estoy aprendiendo ganchos, así que tal vez me esté perdiendo algo. ¿Cómo puedo hacer que funcione correctamente?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En el primer clic shouldFetchTv es falso y onTv es nulo. shouldFetchTv se establece en verdadero

En el segundo clic shouldFetchTv && urls[0] se vuelve verdadero y se envía una solicitud asíncrona, tvResult = tv.data es nulo porque es asíncrono

En el tercer clic, envía la segunda solicitud y el resultado de la primera está disponible, por lo que se establece en la onTv

En el cuarto clic onTv no es nulo

Debido a que useSWR está utilizando la memoria caché del navegador, el resultado asíncrono está disponible en el tercer clic

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda