Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

85
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda