“No se pueden leer las propiedades de indefinido”, a pesar de que los datos están presentes (React/JSX)
Necesito hacer un mapeo sobre un array de novelas que el usuario ha guardado para poder renderizar tarjetas de información sobre cada novela. Cada vez que lo intento, la página falla al cargar y obtengo “TypeError: Cannot read properties of null (reading ‘name’) – intentando leer el nombre de la novela, etc. La consulta funciona perfectamente en el backend, y puedo mostrar todos los datos en la consola del navegador, así que no estoy seguro de por qué obtengo “indefinido”.
He encontrado que puedo renderizar los datos del nivel de usuario, pero no del subnivel “novelas”. Así que creo que el problema puede tener algo que ver con el mapeo?
Aquí está la consulta:
consulta singleUser
{
usuario {
_id
nombre
novelas {
_id
nombre
autor
rango
estaCompleto
}
}
}
Y el código relevante del componente:
if (data) {
usuario = data.usuario
}
console.log(usuario.novelas)
return (
<>
<div classname="row">
{usuario ? (
<>
<h2>Tus Novelas:</h2>
{usuario.novelas.map((novela) => (
<div key="{novela._id}" classname="col-sm-12 col-md-2 col-lg-2 card">
<p> {novela.nombre}
<br>
<span classname="card-subheader">por</span> {novela.autor}
<br>
<span classname="card-subheader">Rango:</span> {novela.rango}
<br>
<span key="{novela.estaCompleto}">{novela.estaCompleto}</span>
</p>
</div>
))}
) : null}
</div>
);
}
Básicamente, es capaz de renderizar usuario.nombre
, por ejemplo, pero no usuario.novela.nombre
.
¡Cualquier ayuda sería muy apreciada! (Y este es mi primer mensaje, así que disculpen de antemano si me falta algo)
davy.ai
Parece que el problema podría estar relacionado con el acceso a los datos en el array
user.novels
. El mensaje de error sugiere que la propiedadname
no se puede leer denull
, lo que indica que tal vez el arraynovels
no se está inicializando o cargando correctamente antes de intentar acceder a sus propiedades.Una posible forma de solucionar esto podría ser agregar algunas declaraciones de registro adicionales o depuradores al código, para localizar exactamente dónde se produce el error y qué datos se están pasando en cada paso. Por ejemplo, podrías agregar una declaración de registro en la función
.map()
para verificar cómo se ve el objetonovel
antes de intentar acceder a sus propiedades, así:Esto te permitiría ver el contenido del objeto
novel
en la consola del navegador y confirmar si en algún momento es realmentenull
oundefined
.Otro problema potencial podría estar relacionado con el hecho de que el array
novels
está anidado dentro del objetouser
. Es posible que debas agregar una lógica condicional para asegurarte de que el objetouser
y sus subpropiedades estén completamente cargados y definidos antes de intentar acceder a ellos, por ejemplo, verificandouser && user.novels && user.novels.length > 0
antes de renderizar la funciónmap()
.Finalmente, es posible que el problema esté relacionado con la forma en que se obtienen o consultan los datos desde el backend. Sin más información sobre la configuración del backend y la API, es difícil decirlo con certeza, pero vale la pena verificar si la consulta se está construyendo y ejecutando correctamente, y si los datos se están recibiendo y analizando correctamente por el componente frontend.
En general, lo más importante al solucionar problemas de este tipo es descomponerlo en pasos más pequeños y probar cada uno individualmente, utilizando declaraciones de registro, depuradores u otras herramientas para aislar dónde se produce el problema y qué datos se están pasando. ¡Buena suerte!