【问题标题】:Use enum in react select option在反应选择选项中使用枚举
【发布时间】:2021-05-12 09:49:06
【问题描述】:

我有这个枚举:

const SPORTS = {
    FOOTBALL: 0,
    GOLF: 1,
    TENNIS: 2
};

我正在尝试使用 lodash 的 forIn 在反应选择下拉列表中使用这些值

<select onChange={(event) => this.update(event, sport.id)}>
  {_.forIn(SPORTS, (key, value) => {
    {
      <option value={key}>{value}</option>;
    }
  })}
</select>;

但我得到了错误:

Invariant Violation: Objects are not valid as a React child

编辑:

更改为 _.map 有效,但现在发现另一个问题。

在我手动添加所有工作正常的选项之前:

<option value={0}>FOOTBALL</option>;
<option value={1}>GOLF</option>;
<option value={2}>TENNIS</option>;

现在使用地图时出现此错误:

Each child in an array or iterator should have a unique "key" prop

现在,当我的选择框呈现时,它们是空的,但我不确定为什么。

【问题讨论】:

  • forIn 返回一个对象,而不是一个组件。
  • 您返回的是对象文字而不是 JSX 元素。使用_.forIn(SPORTS, (key, value) =&gt; (&lt;option value={key}&gt;{value}&lt;/option&gt;))
  • @nbokmans forIn 返回给定的对象。它只是对其进行迭代,不执行映射。

标签: reactjs lodash


【解决方案1】:

_.forIn() 函数返回迭代对象,请改用_.map()

<select onChange={(event) => this.update(event, sport.id)}>
  {_.map(SPORTS, (value, key) => (
    <option value={key} key={key}>{value}</option>;
  ))}
</select>;

【讨论】:

  • 谢谢!我刚刚添加了一个编辑,因为这样做还是有问题
  • 它缺少 key 属性。见编辑。
  • 谢谢,关于密钥的异常已经消失,但现在我的选择框是空的,当我点击下拉菜单时,那里没有选项。有什么你能想到的原因吗?
  • 您还需要返回组件。已更新。
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多