【问题标题】:Why won't for ... in loop here?为什么不会 for ... 在此处循环?
【发布时间】:2018-01-13 09:57:30
【问题描述】:

我有一个包含 N 个对象的变量。对于每个对象,我希望将它们传递给一个子组件 - 因此我们将拥有 N 个具有不同道具的子组件。

家长:

    renderBrandCards() {

        const { marketData } = this.state;

        let i = 0;
        for (const stock in marketData){
            i++;
            return (
                <BrandCard
                    key={i}
                    stock_name={stock}
                    stock_data={marketData[stock]}
                />
            )
        }
   }
   // .... render etc
    return (
        <ScrollView>
            {this.renderBrandCards()}
        </ScrollView>
    )

然而,只有marketDataMap 的第一个对象被传递给BrandCard 组件并被渲染。它不会循环。

我在这里使用for ... in 错了吗?

【问题讨论】:

  • 您应该为此使用array#map
  • 您在循环中使用return。每次调用函数时,返回语句只能计算一次。在循环内多次返回是没用的/没有意义的。return 结束函数的执行
  • @JonasW.,似乎是对象。

标签: javascript function react-native ecmascript-6


【解决方案1】:

我在这里用 for ... 错了吗?

是的,因为您是在 for 循环的 first 步骤之后从函数返回的。

您必须创建一个包含所有所需项目的数组,然后只需返回该数组。

let i = 0;
let brandCards = [];
for (const stock in marketData){
        i++;
        brandCards.push(
            <BrandCard
                key={i}
                stock_name={stock}
                stock_data={marketData[stock]}
            />
        )
}
return brandCards;

但我建议您使用 map 方法的另一种方法。

return Object.keys(marketData).map(function(key, i){
     return (<BrandCard key={i} stock_name={key} stock_data={marketData[key]}/>);
});

【讨论】:

  • 谢谢你,我一定漏掉了一些明显的东西 :)
猜你喜欢
  • 2018-10-02
  • 2011-08-09
  • 2017-09-21
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 2018-10-11
相关资源
最近更新 更多