gpt4 book ai didi

javascript - 如何将 props 作为对象传递

转载 作者:行者123 更新时间:2023-11-28 03:16:44 25 4
gpt4 key购买 nike

我使用 fetch() 函数从 api 获取用户数据。在渲染函数中,我想使用 ...userdata 传递 Prop ,但是当我在 return 语句之前创建对象时,它会给我错误。错误是:类型错误:无法读取未定义的属性“id”

错误是因为在加载应用程序时没有 userData,它仅在单击搜索按钮时获取。

请让我知道如何创建对象并将其作为 prop 传递,而不是单独将对象的每个成员作为 prop 传递。即

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;

最佳答案

您可以使用 if 语句来检查您需要的数据是否已经加载到状态中,以避免在第一次渲染时尝试访问它:

const { searchDone, userData, userAddr, errorMessage } = this.state;
let user = null;
if (userData.length > 0) {
user = {
id : userData[0].id,
name:userData[0].name,
email:userData[0].email,
address:userAddr
};
}

做同样事情的更短方法:

const { searchDone, userData, userAddr, errorMessage } = this.state;
let user = searchDone && {
id : userData[0].id,
name:userData[0].name,
email:userData[0].email,
address:userAddr
};

关于javascript - 如何将 props 作为对象传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59571608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com