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

431
Vistas
No puedo deshacerme de este error "No se pueden leer las propiedades de undefined (leyendo 'cada uno')" al intentar mostrar la respuesta de la API - ReactJs

Tengo el siguiente código: characterActions.js

 export const getCharacters = () => async(dispatch) => { try { dispatch({ type: FETCH_CHARACTERS_REQUEST }) const { data } = await axios.get('https://rickandmortyapi.com/api/character') dispatch({ type: FETCH_CHARACTERS_SUCCESS, payload: data }) } catch (error) { dispatch({ type: FETCH_CHARACTERS_FAIL, payload: 'error' }) } }

characterReducers.js

 import { FETCH_CHARACTERS_REQUEST, FETCH_CHARACTERS_SUCCESS, FETCH_CHARACTERS_FAIL, } from '../actions/characters/characterConstants' export const characterListReducer = (state = { characters: {} }, action) => { switch(action.type) { case FETCH_CHARACTERS_REQUEST: return { loading: true, characters: [] } case FETCH_CHARACTERS_SUCCESS: return { loading: false, characters: action.payload } case FETCH_CHARACTERS_FAIL: return { loading: false, error: action.payload } default: return state; } }

y HomeScreen.js donde quiero mostrar los caracteres obtenidos

 const HomeScreen = () => { const dispatch = useDispatch() const charactersList = useSelector(state => state.charactersList) const { loading, error, characters } = charactersList console.log(characters.results) useEffect(() => { dispatch(getCharacters()) }, [dispatch]) return ( <div> {characters.results.map((character) => { <h1 key={character.id}>{character.name}</h1> })} </div> ) }

Cuando entro en el navegador, sigo recibiendo ** TypeError: no se pueden leer las propiedades de undefined (leyendo 'mapa') **

Estoy tratando de obtener datos de la API de Rick and Morty.

¡Gracias chicos!

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

0

Significa que characters.results no es una matriz.

¿Qué muestra cuando console.log(characters.results) ?

about 4 years ago · Juan Pablo Isaza Denunciar

0

Es posible que los characters de error sean una matriz vacía. Para mayor seguridad, puede usar ||[] o simplemente devolver una matriz en blanco.

 export const characterListReducer = (state = { characters: {} }, action) => { switch(action.type) { case FETCH_CHARACTERS_REQUEST: return { loading: true, characters: [] } case FETCH_CHARACTERS_SUCCESS: return { loading: false, characters: action.payload || [] } // here, in case null data. case FETCH_CHARACTERS_FAIL: return { loading: false, error: action.payload, characters:[] } // here, on error default: return state; } }

Agregar verificación antes de realizar un bucle en caso de error

 const HomeScreen = () => { const dispatch = useDispatch(); const charactersList = useSelector((state) => state.charactersList); const { loading, error, characters } = charactersList; useEffect(() => { dispatch(getCharacters()); }, [dispatch]); return ( <div> {loading ? ( <p>Loading please wait...</p> ) : error ? ( <strong>There is error while fetching data, {error}</strong> ) : ( characters.results.map((character) => { <h1 key={character.id}>{character.name}</h1>; }) )} </div> ); };

/// Código actualizado:

 const { data } = await axios.get('https://rickandmortyapi.com/api/character') dispatch({ type: FETCH_CHARACTERS_SUCCESS, payload: data.results // use results instead to make it consistent with above assign })

/// Pantalla de inicio

 // remove results now characters.map((character) => { <h1 key={character.id}>{character.name}</h1>; })
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