开发者问题收集

使用 React useState 如何访问从 fetch API 返回的数组的键值

2020-06-13
191

使用 React,如何访问使用 useState 设置的获取返回的数组的键值(在此特定情况下为 phone_id )?

const [ contactData, setContactData ] = useState([]);
...fetch
setContactData(body)

然后,如果我 console.log(contactData) ,则响应如下:

ContactsForPhone: Array(1)
  0:
    Phone: {contact_id: 1, phone_id: "1234567890"}
    phone_id: "1234567890"
    __proto__: Object
    length: 1
    __proto__: Array(0)
contact_id: 1
first_name: "first"
last_name: "last"

尝试在 return() 的 html 中显示数据时,可以访问 {contactData.first_name ,但如何访问 phone_id

最初尝试使用 {contactData.ContactsForPhone[0].phone_id ,但收到错误 TypeError: Cannot read property '0' of undefined

3个回答
  • 最初您的 contactData 是一个空数组,因此 contactData.ContactsForPhone 将未定义 ==> 您收到错误。
  • 您需要在访问 ContactsForPhone[0] 之前进行检查
{contactData && contactData.ContactsForPhone && contactData.ContactsForPhone[0] ? contactData.ContactsForPhone[0].phone_id : ""}

更多信息: 您从 api 请求获得的数据实际上是一个对象,获取它后,您调用 setContactData(body) 使 contactData 成为一个对象。 contactData 实际上存储了一个对象,但您最初将其定义为一个数组,这会让您或阅读代码的人感到困惑。 ==> 最好将其定义为 const [ contactData, setContactData ] = useState(null);const [ contactData, setContactData ] = useState({});

Tony Nguyen
2020-06-13

最初在获取数据之前, contactData 将为空数组。

因此,集合中不存在 ContactsForPhone 这样的属性。

更好的方法。

let phoneId;
if(contactData.ContactsForPhone.length > 0){ //add check for length check
     phoneId = contactData.ContactsForPhone[0].phone_id;
}
RIYAJ KHAN
2020-06-13

参考 RIYAJ KHAN 的另一位专家的回答,我认为三元运算符可以在 html 方面提供帮助:

{ ( contactData && contactData.ContactsForPhone && contactData.ContactsForPhone.length > 0 )  ? contactData.ContactsForPhone[0].phone_id : ''}
DevLoverUmar
2020-06-13