【发布时间】:2019-10-17 08:33:56
【问题描述】:
在我的 componentWillMount 中,我有一个函数调用当前用户文档中的“购物车”字段。
此购物车字段是一个对象数组,每个对象都有一个包含图像 URL 数组的字段。
我的问题是我在组件的状态中声明了我想要的变量“shoppingCart”,然后在 componentWillMount 中,我将此值分配给返回的对象数组(购物车对象)。
当我测试是否可以在其中一个对象中获取数组的第一个链接时,程序抱怨该字段未定义并继续崩溃。我注意到,根据我声明状态变量的方式,我可以从这些对象中获取或多或少的信息。
例如:
如果我这样声明我的状态变量:
this.state={
shoppingCart:"",
}
那我只能到shoppingCart[n]中的对象了,
但如果我这样声明我的状态:
this.state={
shoppingCart:[{}],
}
例如,我可以进入我选择的对象的领域:
shoppingCart[n].name;
但是当涉及到尝试在对象中获取数组的值之一时:
shoppingCart[n].url[n]
这是不可能的。
我必须以某种方式声明状态变量吗?
export const getCartItems = (props) => {
return (dispatch, getState, { getFirebase, getFirestore }) => {
const firebase = getFirebase();
const firestore = getFirestore();
const storage = firebase.storage();
return
firestore.collection('users').doc(props.auth.uid).get().then((user)=>{
return user.data().shoppingCart;
})
}
}
constructor(props) {
super(props)
this.state = {
shoppingCart: [{}],
}
}
componentWillMount() {
if (this.props.auth.uid) {
this.props.getCartItems(this.props).then((shoppingCart) => {
this.setState({
shoppingCart,
})
})
}
}
【问题讨论】:
-
这是进入内部数组的完美方式,问题出在哪里/哪里?
-
"...
shoppingCart[n].url[n]这是不可能的。"为什么不?当你尝试时会发生什么?url属性真的是一个数组吗?您真的想要shoppingCard数组和url数组中的相同索引吗?另请展示您正在使用的对象和数组的示例。 -
您是否在每个购物车中存储了一组 url?试试 shoppingCart[n].url
-
nth 购物卡的nth 网址很可能不存在。为什么你会期望这两个指数是一样的? -
所以'n'值只是一个例子,url的索引和当前item可以不同
标签: javascript reactjs firebase