You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ES6/React中如何在列表上下文引用嵌套对象的键?

解决方法:遍历对象键值对获取交易所名称

当你把exchanges从数组改成键为交易所名称的对象后,核心是要获取对象的键(比如"binance")作为显示的名称,同时拿到对应的url。下面分步骤修改代码:

1. 调整父组件的props传递(或在子组件处理)

首先,你的父组件ExchangeContainer现在的state.exchanges是一个对象,你可以选择在父组件把它转换成可遍历的键值对数组,或者直接传递原对象给子组件,让子组件自己处理。

方式一:父组件转换后传递

修改ExchangeContainer的render方法,用Object.entries()把对象转成[键, 值]格式的数组:

render() {
  return (
    <div className="ExchangeContainer list-group">
      {/* 把对象转成[key, exchangeObj]的数组传递 */}
      <ExchangeList exchanges={Object.entries(this.state.exchanges)} />
      <ExchangeDetail />
    </div>
  );
}

方式二:直接传递原对象

保持父组件的render不变,让子组件ExchangeList自己处理对象遍历:

render() {
  return (
    <div className="ExchangeContainer list-group">
      <ExchangeList exchanges={this.state.exchanges} />
      <ExchangeDetail />
    </div>
  );
}

2. 修改列表组件的遍历逻辑

假设ExchangeList是负责渲染整个列表的组件,我们需要遍历exchanges对象的键值对,把每个交易所的名称和url传给列表项组件:

如果用方式一(父组件已转数组):

class ExchangeList extends Component {
  render() {
    return (
      <ul>
        {/* 遍历[key, exchangeObj]数组,解构拿到名称和数据 */}
        {this.props.exchanges.map(([exchangeName, exchangeData]) => (
          <ExchangeItem
            key={exchangeName}
            exchangeName={exchangeName}
            exchangeUrl={exchangeData.url}
          />
        ))}
      </ul>
    );
  }
}

如果用方式二(子组件处理原对象):

用Object.entries()直接遍历对象,或者用Object.keys()拿到所有键再取值:

class ExchangeList extends Component {
  render() {
    const { exchanges } = this.props;
    return (
      <ul>
        {/* 方式A:用Object.entries直接获取键和值 */}
        {Object.entries(exchanges).map(([exchangeName, exchangeData]) => (
          <ExchangeItem
            key={exchangeName}
            exchangeName={exchangeName}
            exchangeUrl={exchangeData.url}
          />
        ))}

        {/* 方式B:用Object.keys拿到键,再通过键取url */}
        {/* {Object.keys(exchanges).map(exchangeName => (
          <ExchangeItem
            key={exchangeName}
            exchangeName={exchangeName}
            exchangeUrl={exchanges[exchangeName].url}
          />
        ))} */}
      </ul>
    );
  }
}

3. 更新列表项组件的代码

现在你的列表项组件(就是那个有getListItem的组件)可以直接接收exchangeName和exchangeUrl这两个props,不再需要从this.props.exchange.name取值:

class ExchangeItem extends Component {
  getListItem = (exchangeUrl, exchangeName) => (
    <a className="nav-link active" href={exchangeUrl}>
      {exchangeName}
    </a>
  );

  render() {
    const { exchangeName, exchangeUrl } = this.props;
    return (
      <li className="list-group-item">
        {this.getListItem(exchangeUrl, exchangeName)}
      </li>
    );
  }
}

这样修改后,你的列表就能正确显示交易所的名称(对象的键)和对应的链接了。


内容的提问来源于stack exchange,提问作者marcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:14