我正在从const details
中提取交易详细信息,并且需要从JSON paymentResponse
中提取brand
。我收到了一个未定义的错误,但let cardType
中的所有内容看起来都正确。我遗漏了什么?let cardType = JSON.parse(orderDetails.paymentResponse).data?.payment_method_details?.card?.brand;
代码:
const [orderDetails, setOrderDetails] = useState({});
const getOrderDetails = async () => {
let data = {};
data.orderId = params.id;
const details = await orderApi.getOrderDetails(userAuthToken, data);
if (details && details.data.success) {
if (details.data.data.length > 0) {
setOrderDetails(details.data.data[0]);
} else {
navigate('/');
}
} else {
navigate('/');
}
};
useEffect(() => {
(async () => {
if (params.id) {
setLoading(true);
await getOrderDetails();
setLoading(false);
} else {
navigate('/');
}
})();
}, [params.id]);
//
let cardType = JSON.parse(orderDetails.paymentResponse).data?.payment_method_details?.card?.brand;
console.log(cardType);
JSON结构,其中brand
为:
{
"data":{
"payment_method_details":{
"card":{
"brand":"jcb"
}
}
}
}
1条答案
按热度按时间new9mtju1#
由于
orderDetails
对象在组件首次加载时为空,因此orderDetails.paymentResponse
未定义,尝试访问其data
属性会抛出错误。您需要处理此未定义变量,因为JSON.parse
无法为您执行此操作。由于您已经使用optional chaining操作符,因此按如下所示更改特定行应该可以消除此错误: