Не могу отобразить данные с сервера

79
15 января 2021, 14:20

Не могу отобразить данные, которые получаю с сервера:

import React from 'react'
import {MDBTable, MDBTableBody, MDBTableHead, MDBContainer, MDBCol} from 'mdbreact';
import Header from '../Register/stepData/Header'
import {MDBDataTable} from 'mdbreact';
export default class PriceList extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            services: []
        };
    }
    renderServices  = arr => {
        return {
            columns: [
                {
                    label: '№',
                    field: 'number',
                    sort: 'asc',
                    width: 270
                },
                {
                    label: 'Название Услуги',
                    field: 'title',
                    sort: 'asc',
                    width: 150
                },
                {
                    label: 'Цена',
                    field: 'position',
                    sort: 'asc',
                    width: 270
                },
            ],
            rows: arr.data.map(item => ({
                number: item.id_service,
                title: item.title,
                office: item.price,
            }))
        };
    }
    getServices = _ => {
        fetch('http://localhost:3001/prices')
            .then(response => response.json())
            .then(response => this.setState({services: response.data}))
            .catch(err => console.log(err))
    }
    componentDidMount() {
        this.getServices();
    }
    render() {
        const {services} = this.state
        console.log(services)
        return (
            <>
                <Header/>
                <MDBContainer>
                    <MDBDataTable
                        hover
                        data={services.map(this.renderServices)}
                    />
                </MDBContainer>
            </>
        )
    }
}

Answer 1

У вас при вызове services.map(this.renderServices) в метод передаются элементы.

Т.е, внутри renderServices переменная arr будет элементом вида:

{
    id_service: 1, title: "", price: 25
}

Поля data там нет. Следовательно, arr.data будет undefined, вот arr.data.map и падает.

Вместо data={services.map(this.renderServices)} написать data={this.renderServices(services)}, а вместое arr.data.map написать arr.map.

READ ALSO
Сокращение кода в js

Сокращение кода в js

Можно ли как-то сократить код?

95
Создание объектов, метод forEach для JSON

Создание объектов, метод forEach для JSON

Что происходит в функции(person), можете написать по порядку?

114
Роут link-to копирует параметры запроса (Ember.js)

Роут link-to копирует параметры запроса (Ember.js)

Например имеется роут groups выводящий соответственно список всех группЕсли у роута есть параметры, например, groups?grouptype=new, то он, например, выводит...

112
Автоматически узнать ширину у canvas

Автоматически узнать ширину у canvas

Есть скрипт, который формирует кнопку canvasВнутри кнопки пишется текст, как узнать ширину текста что бы правильно оцентровать кнопку? Проблема...

89