【问题标题】:How to map property and value of an object to a table?如何将对象的属性和值映射到表?
【发布时间】:2017-05-22 13:42:54
【问题描述】:

到目前为止,这是我的代码,它根据“基本”汇率和选定日期提取历史货币数据。有没有办法显示“货币名称”和“汇率”列中返回的数据?到目前为止,我的代码如下:http://codepen.io/co851002/pen/PWqVwr

var date = '2017-01-06'
var base = 'USD'
var API_request = 'https://api.fixer.io/' + date + '?base=' + base;

var App = React.createClass({

  getInitialState: function() {
    return {
      rates: []
    }
  },

  componentDidMount: function() {
    var th = this;
    this.serverRequest =
      axios.get(API_request)
      .then(function(result) {
        console.log(result.data.rates)
        th.setState({
          rates: result.data.rates
        });
      })
  },

  componentWillUnmount: function() {
    this.serverRequest.abort();
  },

  render: function() {
    var self = this;

    return (
      <div className="table">
    <table >
       <thead>
          <tr>
             <th>Currency</th>
             <th>Value</th>
          </tr>
       </thead>
       <tbody>
                    <tr>
              <td>Currency goes here</td>  
              <td>Value goes here</td>  
                    </tr>
       </tbody>
     </table>
    </div>
    )
  }
});

React.render(<App />, document.querySelector("#root"));

【问题讨论】:

    标签: javascript object reactjs dictionary


    【解决方案1】:

    只需在您的数据上使用 Object.keys(rates).map 并在每次迭代时返回所需的 DOM 元素。

    Object.keys()

    Object.keys() 方法返回给定对象自己的可枚举属性的数组...

    换句话说,Object.keys 将为您提供一个包含所有不同货币类型的数组,如下所示:

    ["AUD", "BGN", "BRL", ...]
    

    现在您可以使用Array.prototype.map 遍历数组并返回需要返回的内容。

    Array.prototype.map()

    map() 方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数。

    {Object.keys(rates).map(function(value, idx) {
      return <tr key={idx}>
        <td>{value}</td>
        <td>{rates[value]}</td>
      </tr>
    })}
    

    这是一个例子。

    var date = '2017-01-06'
    var base = 'USD'
    var API_request = 'https://api.fixer.io/' + date + '?base=' + base;
    
    var App = React.createClass({
    
      getInitialState: function() {
        return {
          rates: []
        }
      },
    
      componentDidMount: function() {
        var th = this;
        this.serverRequest =
          axios.get(API_request)
          .then(function(result) {
            console.log(result.data.rates)
            th.setState({
              rates: result.data.rates
            });
          })
      },
    
      componentWillUnmount: function() {
        this.serverRequest.abort();
      },
    
      render: function() {
        var self = this;
        var rates = this.state.rates;
        return (
          <div className="table">
        <table>
           <thead>
              <tr>
                 <th>Currency</th>
                 <th>Value</th>
              </tr>
           </thead>
           <tbody>
             {Object.keys(rates).map(function(value, idx) {
               return <tr key={idx}>
                 <td>{value}</td>
                 <td>{rates[value]}</td>
               </tr>
             })}
           </tbody>
         </table>
    	</div>
        )
      }
    });
    
    ReactDOM.render(<App />, document.querySelector("#root"));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/axios/0.8.1/axios.min.js"></script>
    
    <div id="root"></div>

    【讨论】:

    • 谢谢@DavidDomain - 我现在可以睡觉了:)
    猜你喜欢
    • 2020-11-16
    • 2022-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2021-07-14
    • 2010-10-18
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多