Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取作为对象数组一部分的对象内部的数组的值?_Javascript_Reactjs_Firebase - Fatal编程技术网

Javascript 如何获取作为对象数组一部分的对象内部的数组的值?

Javascript 如何获取作为对象数组一部分的对象内部的数组的值?,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,在我的组件willmount中,我有一个函数,在当前用户的文档中调用“购物车”字段 此购物车字段是一个对象数组,每个对象都有一个包含图像URL数组的字段 我的问题是,我在组件的状态中声明了所需的变量“shoppingCart”,然后在componentWillMount中,我将该值分配给返回的对象数组(shoppingCart对象) 当我测试是否可以获取其中一个对象中数组的第一个链接时,程序会抱怨字段未定义,并继续崩溃。我注意到,根据我如何声明我的状态变量,我可以从这些对象获取更多或更少的信息

在我的组件willmount中,我有一个函数,在当前用户的文档中调用“购物车”字段

此购物车字段是一个对象数组,每个对象都有一个包含图像URL数组的字段

我的问题是,我在组件的状态中声明了所需的变量“shoppingCart”,然后在componentWillMount中,我将该值分配给返回的对象数组(shoppingCart对象)

当我测试是否可以获取其中一个对象中数组的第一个链接时,程序会抱怨字段未定义,并继续崩溃。我注意到,根据我如何声明我的状态变量,我可以从这些对象获取更多或更少的信息

例如:

如果我这样声明我的状态变量:

this.state={
shoppingCart:"",
}
this.state={
shoppingCart:[{}],
}
那么我只能到达shoppingCart[n]中的对象

但如果我这样宣布我的状态:

this.state={
shoppingCart:"",
}
this.state={
shoppingCart:[{}],
}
我可以进入我选择的对象的字段,例如:

shoppingCart[n].name;
shoppingCart[n].url[n]
但在尝试获取对象内部数组的某个值时,例如:

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:[{}]}
时,您的意思是加载一个没有字段的购物车。如果您试图访问空对象的url,您将得到未定义的
。如果尝试访问undefined的第n个元素,则会出现运行时错误

在您调用promise之后,在您的响应加载到状态之前还有一段时间。在这段时间内,您的初始状态需要防止访问上述未定义字段的情况

两个可行的选择是:

this.state = { shoppingCart: [] };


最后,另一个解决方案涉及没有默认状态,但每次引用状态时都有一个条件引用。

这是一个非常好的方法,可以访问内部数组,问题出在哪里?“…
shoppingCart[n].url[n]
这是不可能的。”为什么不呢?当你尝试时会发生什么?
url
属性真的是数组吗?您真的希望
shoppingCard
数组和
url
数组中的索引相同吗?另外,请展示您正在使用的对象和数组的示例。您是否在每个购物车中存储URL数组?请尝试shoppingCart[n].url最有可能的是
n
th购物卡的
n
th url不存在。为什么您希望这两个索引相同?因此“n”值只是一个示例,url的索引和当前项的索引可能不同您只是在猜测,我们不知道从
getCartItems()返回的数据的结构是什么
我们不知道OP试图以他/她描述的方式访问数据的位置/方式。因此,数据的顺序大致如下:[{名称、描述、价格、url[link1、link2、link3]},{此处相同},{此处相同}。显然,数组的大小取决于购物车中有多少项@YannickKI可以访问promise变量中的数据,但是当我将值赋给state变量时,我无法浏览其字段,再一次,我认为这是因为state和promise变量在结构上是不同的。你是没有定义还是类型错误?@PeterCheng你的答案有效,我想我也必须在state变量中定义字段?谢谢你的帮助!只是想澄清一下,这是第二次