javascript - 如何将道具作为对象传递
问题描述
我正在使用 fetch() 函数从 api 获取用户数据。在渲染函数中,我想使用 ...userdata 传递道具,但是当我在 return 语句之前创建对象时它给了我错误。错误是: TypeError:无法读取未定义的属性“id”
错误是因为在加载应用程序时没有 userData,它仅在单击搜索按钮时获取。
请让我知道如何创建对象并将其作为道具传递,而不是分别将对象的每个成员作为道具传递。IE
import React from 'react';
import './App.css';
import SearchBar from "./components/search";
import Result from "./components/result";
class ContactSearch extends React.Component {
constructor() {
super();
this.state = {
// userData: {
// id: 0,
// name: "",
// username: ""
// },
userData : [],
userAddr : {},
searchDone: false,
errorMessage: ""
};
this.callUserData = this.callUserData.bind(this);
}
callUserData(user) {
const url = `<URL>`;
fetch(url)
.then(handleErrors)
.then(resp => resp.json())
.then(data => {
var { ...addr} = data[0].address;
this.setState({
userData: [...data],
userAddr: addr,
searchDone: true,
errorMessage: ""
});
})
.catch(error => {
// If an error is catch, it's sent to SearchBar as props
this.setState({ errorMessage: error.message });
});
function handleErrors(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response;
}
}
render() {
const { searchDone, userData, userAddr, errorMessage } = this.state;
console.log('Inside render');
let **user** = {
id : userData[0].id,
name:userData[0].name,
email:userData[0].email,
address:userAddr
};
return (
<div className="ContactSearch">
<SearchBar
callBackFromParent={this.callUserData}
error={errorMessage}
/>
{searchDone && userData && (
<Result
{...**user**}
/>
)}
</div>
);
}
}
export default ContactSearch;
解决方案
也许你需要这个
<Result user={searchDone && userData[0]} />
结果组件可能是这样的
const Result=(props)=>
( props.user?<div>{props.user.id}</div>:'no result..^.^')
如果您的数据类似于 [{id:1},{id:2}] 从数据中删除额外的括号userData: [data]
应该像下面
userData: data,
推荐阅读
- asp.net - 什么是 .NetCore 分析器
- javascript - Mongoose 具有相同的保存和更新中间件功能
- flutter - 如何从 Flutter Firestore 中的嵌套集合中获取数据?
- xamarin - 在请求位置许可时,应用程序仅在 iOS 中崩溃。在 xamarin
- node.js - 使用nodejs驱动程序在mongodb中的dd.mm.yyyy中的日期格式
- c# - 处理所有子控件和数据 - C#
- c# - 更新父实体而不更改子实体
- spring-mvc - 异常:com.fasterxml.jackson.core.JsonParseException:无法识别的令牌“代码”:期待(“真”、“假”或“空”)
- python - 如何检查列表中的数字是否小于列表中的另一个数字
- web-services - 无法添加托管在 azure 中的 WCF 服务