【问题标题】:mapping an array not returning value映射不返回值的数组
【发布时间】:2018-06-29 21:00:33
【问题描述】:

我有一个试图从中映射值的数组,但它没有返回我需要继续我的项目的内容。

有问题的代码块是:

<select
    className={"clubsList"}
    defaultValue={"allClubs"}
    onChange={this.handleClubChange}>
    <option key={"allClubs"} value={"allClubs"}>All Clubs</option>
    {LEAGUE_IDS_NAMES.forEach(league => {
        if (league.id == this.props.fantasyLeagueId) {
            league.clubs.map(club => {
                console.log('club:', club.name);
                return <option key={club.name} value={club.name}>{club.name}</option>;
            });
        }
    })}
</select>

这样做的目的是显示俱乐部名称列表。 LEAGUE_IDS_NAMES 是一个导入的文件,它是一个对象数组。这些对象是足球联赛,每个联赛的其中一个键是clubs,它又是一个对象数组,如下所示:

clubs: [
    {name: 'Club Name1'},
    {name: 'Club Name2'},
    ...
]

我正在使用 React/Redux 保持联赛 ID 处于状态,然后使用它与数组中的每个联赛对象进行比较,检查每个联赛对象的 ID。如果匹配,它应该给我返回声明。我知道我正在正确访问俱乐部名称,因为 console.log 正确地为我提供了该州联赛 ID 的俱乐部名称。它没有做的是给我&lt;option&gt; 的一部分。

为了进行实验,我在league.clubs.name 行前面扔了一个return,但仍然没有。对于这个&lt;select&gt;,我唯一看到的是“所有俱乐部”&lt;option&gt;

有什么想法吗?

【问题讨论】:

    标签: node.js reactjs redux react-redux


    【解决方案1】:

    问题是你不能从forEach 中产生任何东西。

    鉴于其唯一来自特定联赛的俱乐部,您可以过滤联赛,然后映射俱乐部,例如

    const league = LEAGUE_IDS_NAMES.find(l => l.id === this.props.fantasyLeagueId);
    return league && league.clubs.map(l => <option key={c.name} value={c.name}>{c.name}</option>)
    

    由于您遵循 Redux 模式,您可以将过滤器移到选择器中。

    【讨论】:

    • 不错的答案,但我认为您的 find 应该是 filter
    • @Kevin nah 故意使用find,因为它是一个特定的联赛,而不是一个联赛列表,只是在之后滥用了map,尽管更新了。
    • 就是这样!谢谢!我在这个问题上绞尽脑汁了一天多一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2022-01-15
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多