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

131
Vistas
Mis lanzamientos de variables useState no pueden leer la longitud de indefinido

Estoy implementando la paginación donde tengo una variable useState que cambio con un cambio en el número de página, a continuación está el código donde uso dos useEffects para llamar a los datos de pagenumber y pagenumber+1 para verificar si arroja un 404, así que sé cuándo dejar de mostrar el siguiente botón.

 useEffect(() => { async function fetchData() { try { const baseUrl = 'https://gateway.marvel.com:443/v1/public/characters'; const url = baseUrl + '?ts=' + ts + '&apikey=' + publickey + '&hash=' + hash+ '&limit=100&offset='+parseInt(pageNumber)*50; const { data } = await axios.get(url); setCharactersData(data.data.results); setLoading(false); } catch (e) { setCharactersData([]); console.log(e); } } fetchData(); }, [ pageNumber ]); useEffect(() => { async function fetchData() { try { const baseUrl = 'https://gateway.marvel.com:443/v1/public/characters'; const url = baseUrl + '?ts=' + ts + '&apikey=' + publickey + '&hash=' + hash+ '&limit=100&offset='+(parseInt(pageNumber)+1)*50; const { data } = await axios.get(url); console.log(data); setNewData(data.data.results); setLoading(false); } catch (e) { setNewData([]); console.log(e); } } fetchData(); }, [ pageNumber ]);

Parte de retorno:

 return ( <div> { parseInt(pageNumber)!==0 && <Link className='characterlink1' to={`/characters/page/${parseInt(pageNumber)-1}`}> Previous </Link>} { charactersData.length===0 && <Four />} { newData.length>0 && <Link className='characterlink2' to={`/characters/page/${parseInt(pageNumber)+1}`}> Next </Link>}

Esto funcionaba bien hasta que agregué las líneas:

  1. establecerDatosCaracteres([]); en el bloque catch del primer useEffect.
  2. { charactersData.length===0 && } en la parte de retorno.

Agregué estas líneas para agregar una página 404 si la URL tiene un número de página mayor que los números de página disponibles. Cuando hago esto me sale un error que dice:

 TypeError: Cannot read properties of undefined (reading 'length')

Lo extraño es que no veo este error hasta que cambio la URL 3 o 4 veces.

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

0

Estás cambiando tu estado en un bloque catch, que no es como se supone que debes cambiar tu estado. En cambio, diría que es mejor intentar inicializar su estado con la matriz vacía para que la propiedad de length siempre exista, eliminando así el error. Tal cosa se puede hacer así:

 const [charactersData, setCharactersData] = useState([]);

O con el tipo de los caracteresData (yay mecanografiado)

 const [charactersData, setCharactersData] = useState<charactersDataType>([]);
about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Es porque usó Pascal casing en sus bloques de búsqueda y usó camelcasing en el bloque de retorno?

 return ( <div> { parseInt(pageNumber)!==0 && <Link className='characterlink1' to={`/characters/page/${parseInt(pageNumber)-1}`}> Previous </Link>} { CharactersData.length===0 && <Four />} { newData.length>0 && <Link className='characterlink2' to={`/characters/page/${parseInt(pageNumber)+1}`}> Next </Link>}
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