【问题标题】:Render object in reactjs在 reactjs 中渲染对象
【发布时间】:2017-10-23 15:45:53
【问题描述】:

我有 symfony rest api,我正在为此编写一些前端(第一次使用 react)。所以,这是我的 index.js:

import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';

class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            visits: []
        };
    }

    componentDidMount() {
        const url = 'http://localhost/app.php/api/visits?from=2017-05-05&to=2017-05-08';
        axios.get(url)
            .then(response => response.json())
            .then(
                visits => this.setState({visits})
            ).catch(err => err)
    }

    render() {
        return (
            <div>
                <ul>
                    {this.state.visits.map((visit, index) => <li key={index}>{visit}</li>)}
                </ul>
            </div>
        )
    }
}
const app = document.getElementById('app');
ReactDOM.render(<App/>, app);

来自 api 的响应如下:

{
    "2017-05-05":  2,
    "2017-05-06":  8,
    "2017-05-07": 10,
    "2017-05-08":  1,
}

我如何遍历它并将其打印到屏幕上? 现在我没有收到任何错误,只是从服务器获得响应,但屏幕上没有任何内容。

问候

【问题讨论】:

    标签: arrays json rest reactjs


    【解决方案1】:

    它不是任何array,它是object,所以直接map 将不起作用。首先,我们需要使用Object.keys() 来获取array 中的所有键,然后使用map

    像这样:

    render() {
        let visits = this.state.visits;
        return (
            <div>
                <ul>
                    {Object.keys(visits).map((visit, index) => <li key={index}>{visit} : {visits[visit]}</li>)}
                </ul>
            </div>
        )
    }
    

    Object.keys: 将返回该object 的所有键的array

    检查工作的sn-p:

    class App extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                visits: []
            };
        }
    
        componentDidMount() {
            this.setState({
               visits: {
                  "2017-05-05":2,
                  "2017-05-06":8,
                  "2017-05-07":10,
                  "2017-05-08":1
                }
            })        
        }
    
        render() {
          let visits = this.state.visits;
          return (
            <div>
                <ul>
                    {Object.keys(visits).map((visit, index) => <li key={index}>{visit} : {visits[visit]}</li>)}
                </ul>
            </div>
        )
      }
    }
    const app = document.getElementById('app');
    ReactDOM.render(<App/>, app);
    <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>
    
    <div id='app'/>

    【讨论】:

    • 是的,我对这个数组不好。我对请求进行了一些更改(将 axios 更改为 fetch),它正在使用您的代码,谢谢! :)
    • 也可以使用Object.entries,返回[key, value]的列表:Object.entries(visits).map(([visit, n], index) =&gt; &lt;li key={index}&gt;{visit} : {n}&lt;/li&gt;)
    • 我还有一个问题。我从 3 个端点(访问、入口和访客)获取数据。响应看起来相同(同一日期但其他数字)。我如何映射它以将其呈现在一个表中?创建其他将其合并到一个对象的函数?
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2021-12-27
    • 1970-01-01
    • 2020-07-02
    • 2021-05-13
    相关资源
    最近更新 更多