"Cannot read properties of undefined," 即使数据存在 (React/JSX)
"Cannot read properties of undefined," even though data is there (React/JSX)
我需要映射用户保存的一系列小说,以便在每本小说上呈现信息卡片。每次我尝试时,页面都无法加载并且我得到“TypeError:无法读取 null 的属性(读取 'name')——试图读取小说的名称等。查询在后端完美运行,我我能够通过控制台记录浏览器中的所有数据,所以我不确定为什么会出现“未定义”。
我发现我可以呈现用户级别的数据,但不能呈现“小说”子级别的数据。所以我认为问题可能与映射有关?
这里是查询:
{
user {
_id
name
novels {
_id
name
author
rank
isComplete
}
}
}
以及组件的相关代码:
if (data) {
user = data.user
console.log(user.novels)
}
return (
<>
<div className="row">
{user ? (
<>
<h2>Your Novels:</h2>
{user.novels.map((novel) => (
<div
key={novel._id}
className="col-sm-12 col-md-2 col-lg-2 card">
<p> {novel.name}
< br />
<span className="card-subheader" >by</span> {novel.author}
< br />
<span className="card-subheader">Rank:</span> {novel.rank}
< br />
<span key={novel.isComplete}>{novel.isComplete}</span>
</p>
</div>
))}
) : null}
</div>
</>
);
}
所以基本上,它可以渲染 user.name
,但不能渲染 user.novel.name
如有任何帮助,我们将不胜感激! (这是我的第一个 post,如有遗漏请提前致歉)
看来这不是你前端代码的错。您应该在 console
中检查 user
。它可能 user.novels
包含导致读取 novel.name
错误的空对象,如下所示:
{
user: {
_id: ...
name: ...
novels: [
null or {}, // novel is null so reading novel.name cause the error.
{
_id: ...
name: ...
author: ...
rank: ...
isComplete: ...
}
],
...
}
}
但是你可以在前端检查这个,但从技术上讲,这些空对象不应该出现在你来自后端的响应中,应该修复它们。
我需要映射用户保存的一系列小说,以便在每本小说上呈现信息卡片。每次我尝试时,页面都无法加载并且我得到“TypeError:无法读取 null 的属性(读取 'name')——试图读取小说的名称等。查询在后端完美运行,我我能够通过控制台记录浏览器中的所有数据,所以我不确定为什么会出现“未定义”。
我发现我可以呈现用户级别的数据,但不能呈现“小说”子级别的数据。所以我认为问题可能与映射有关?
这里是查询:
{
user {
_id
name
novels {
_id
name
author
rank
isComplete
}
}
}
以及组件的相关代码:
if (data) {
user = data.user
console.log(user.novels)
}
return (
<>
<div className="row">
{user ? (
<>
<h2>Your Novels:</h2>
{user.novels.map((novel) => (
<div
key={novel._id}
className="col-sm-12 col-md-2 col-lg-2 card">
<p> {novel.name}
< br />
<span className="card-subheader" >by</span> {novel.author}
< br />
<span className="card-subheader">Rank:</span> {novel.rank}
< br />
<span key={novel.isComplete}>{novel.isComplete}</span>
</p>
</div>
))}
) : null}
</div>
</>
);
}
所以基本上,它可以渲染 user.name
,但不能渲染 user.novel.name
如有任何帮助,我们将不胜感激! (这是我的第一个 post,如有遗漏请提前致歉)
看来这不是你前端代码的错。您应该在 console
中检查 user
。它可能 user.novels
包含导致读取 novel.name
错误的空对象,如下所示:
{
user: {
_id: ...
name: ...
novels: [
null or {}, // novel is null so reading novel.name cause the error.
{
_id: ...
name: ...
author: ...
rank: ...
isComplete: ...
}
],
...
}
}
但是你可以在前端检查这个,但从技术上讲,这些空对象不应该出现在你来自后端的响应中,应该修复它们。