无法使用 react 和 hooks 访问嵌套 JSON。TypeErrors
2021-01-21
1267
JSON
这是 JSON 对象在状态下的样子。
{
"gender": "male",
"name": {
"title":"Mr."
"first":"Mike",
"last": "Wazowski"
},
...
}
React
const App = () => {
const [user, setUser] = React.useState([]);
React.useEffect(() => {
axios
.get("https://randomuser.me/api")
.then((response) => {
const info = response.data.results[0];
setUser(info);
})
.catch((err) => {
console.log(err);
});
}, []);
访问第一个 lvl 数据工作正常
return (
<div>
<h1>Hello, {user.gender}</h1>
<h1>Hello, {user.email}</h1>
</div>
)
调用对象返回 Err:对象作为 React 子项无效
return (
<div>
<h1>Hello, {user.name}</h1>
</div>
)
调用嵌套数据返回 TypeError:user.name 未定义错误
return (
<div>
<h1>Hello, {user.name.first}</h1>
</div>
)
为什么我可以访问像性别这样的“第一级”数据,但不能访问像 name.first 这样的“第二级”数据?
我需要一些我不知道的特殊语法吗?
2个回答
我相信您的错误发生的时间不同 - 您将对象初始化为空数组,因此您可以访问第一级字段(将未定义),但不能访问它们的字段(因此 user.name 未定义)。然后您填充数据,
user.name
成为一个对象,您不能只在 DOM 中渲染,因此您会得到
对象作为 React 子项无效
。要解决此问题,只需添加一个空检查 -
<h1>Hello, {user.name && user.name.first}</h1>
Nadia Chibrikova
2021-01-21
我认为您的代码存在问题,因为您尝试使用
response.data.results[0]
而不将其转换为 JavaScript 对象。也就是说,API 的响应是 JSON,您需要将其转换为 JS 对象。
在使用
response.data.results[0]
JSON 之前,您可以尝试将其解析为对象吗?
这应该可行:
const info = JSON.parse(response.data.results[0]);
10110
2021-01-21