@fOrZe0

Почему не изменяется состояние компонента?

Доброго времени суток. Появилась такая проблема. В методе componentDidMount() вызываю getData(), который, в свою очередь, обращается к серверу и ответ сервера кладёт в состояние. Но выполнение метода getData останавливается на след. части кода
this.setState({films: data}, () => {
     console.log(this.state.films);
});


Вот весь код
import React from "react";


export default class LibraryContent extends React.Component {
    films = [];

    constructor(props){
        super(props);

        this.state = {
            films: []
        };

        this.getData = this.getData.bind(this);

    }

    getData(){
        fetch('https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=935************d58f&language=ru')
            .then(response => {
                    if (response.status !== 200) {
                        console.log('Код ошибки : ' +
                            response.status);
                        return;
                    }

                    // Examine the text in the response
                    response.json().then(function(data) {
                        console.log("Data : ");
                        console.log(data);

                        console.log("State: ");

                        this.setState({films: data}, () => {
                            console.log(this.state.films);
                        });
                        console.log("Эта строка в консоль уже не выводится");
                    });
                }
            )
            .catch(function(err) {
                console.log('Fetch Error :-S', err);
            });
    };

    componentDidMount(){
        this.getData();
    }

    render() {
        return (
            <div>
                Test
            </div>
        )
    }
}
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
sharpfellow
@sharpfellow
Front
Вы используете this.setState в function ,
response.json().then(function(data)
у которой свой this, а не this класса LibraryContent.

Надо заменить на стрелочную функцию, как выше
.then(response => {

console.log("Эта строка в консоль уже не выводится");

Это не выполняется, так выше у this нет setState, следовательно должна была произойти ошибка
this.setState is not a function
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 11:11
10000 руб./за проект
29 мар. 2024, в 10:00
10000 руб./за проект
29 мар. 2024, в 09:59
750 руб./в час