【问题标题】:How can I reach the values of an array that is inside an object that is part of an array of objects?如何获得对象数组中的对象内的数组的值?
【发布时间】: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


【解决方案1】:

当您声明您的初始状态为{ shoppingCart: [{}] } 时,您的意思是加载一个没有字段的购物车。如果您尝试访问空对象的 url,您将获得undefined。如果您尝试访问 undefined 的第 n 个元素,您将收到运行时错误。

调用 promise 后,需要一段时间才能将响应加载到状态。在那个时候,您的初始状态需要防止您访问上述未定义字段的情况。

有两个可行的选择

this.state = { shoppingCart: [] };

this.state = { shoppingCart: [ { url: [] } ] };

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

【讨论】:

  • 你只是在这里猜测,我们不知道从 getCartItems() 返回的数据的结构是什么,我们不知道 OP 试图在哪里/如何以他的方式访问数据/她描述了它。
  • 数据几乎是这样排序的:[{name,description, price, url [ link1, link2,link3 ] },{same thing here},{same thing here}]。显然数组的大小取决于购物车中有多少物品@YannickK
  • 我可以在 promise 变量中很好地访问数据,但是当我将值分配给 state 变量时,我无法导航其字段,我再次认为这是因为 state 和 promise 变量不同在结构方面
  • 您是未定义还是 TypeError?
  • @PeterCheng 您的回答有效,我想我也必须在状态变量中定义该字段?谢谢您的帮助!只是为了澄清这是第二个
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 2015-11-20
  • 2015-06-14
  • 1970-01-01
  • 2016-08-29
  • 2018-11-14
  • 2022-11-27
  • 2019-07-29
相关资源
最近更新 更多