jams
@jams
Веб-разработчик | PHP | WP | JS

Как записать результат запроса в состояние React?

Добрый вечер.
Полдня долблюсь с тем, чтобы записать результат запроса в состояние React.
Весь код:
import React, { Component } from "react";
import ReactDOM from "react-dom";
import axios from "axios";

export default class AllCalcs extends Component {
    constructor (props) {
        super(props);

        this.state = {
            calcs: []
        };
        
        this.listItems = '';

        this.fetchData();
        this.getCalcs();
    }

    fetchData() {
        axios.post('/api/all-calcs')
            .then(response => this.setState({calcs: response.data}))
            .catch(error => console.log(error));
    }

    getCalcs() {
        this.listItems = this.state.calcs.map((calc, index) =>
            <a key={index} href="#" className="list-group-item list-group-item-action flex-column align-items-start">
                <div className="d-flex w-100 justify-content-between">
                    <h5 className="mb-1">{calc.h1}</h5>
                    <small>3 days ago</small>
                </div>
                <p className="mb-1">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget
                    risus varius blandit.</p>
                <small>Donec id elit non mi porta.</small>
            </a>
        );
    }

    render() {
        return (
            <div>
                <div className="list-group">
                    {this.listItems}
                </div>
            </div>
        );
    }
}

if (document.querySelector('#all-calcs')) {
    ReactDOM.render(<AllCalcs />, document.querySelector('#all-calcs'));
}


Уверен, опытный разработчик за секунду поймет в чем проблема и подскажет. Смысл в том, что по /api/all-calcs мы получаем массив с постами. Их нужно записать в this.state.calcs, чтобы можно было использовать в методе getCalcs.
Помогите, пожалуйста, разобраться что не так делаю.
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
hzzzzl
@hzzzzl
Переложи вызов fetchData в componentDidMount, а вызов getCalcs в рендер перед ретурном при условии что calcs в стейте уже заполнены , типа if (this.state.calcs.length) { this. getCalcs() }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bugagashnik
Подробнее напиши, на каком этапе проблема? Запрос выполняется? Успешно? Дата приходит с запроса?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы