Cannot read property of undefined NodeJs React

138
05 февраля 2021, 05:10

Имеется серверная часть на NodeJs и клиентская на React. Со стороны сервера использую /api, где передаю полученные данные из mysql:

server.use('/api/getCatProduction', (req, res) => {
        res.setHeader('Content-Type', 'application/json');
        db.fetchData(models.prodCatQuery('zru'), (error, result) => {
            if(error) 
                console.log(error);
            else {
                res.json(result);
            }
        });
    });

В классе страницы получаю их так:

constructor(props) {
    super(props);
    this.state = {
        data: []
    }
}
componentDidMount() {
    this.getData();
}
getData() {
    fetch('/api/getCatProduction', {
        headers : { 
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    }).then(response => response.json()).then(response => this.setState({data: response}));
}

При попытке вывода полученных значений средствами:

    const { data } = this.state;
    console.log(data[0].category_name);
    console.log(data[0][category_name]);
    console.log(data[0]["category_name"]);

Возникает ошибка

productions.js:32 Uncaught (in promise) TypeError: Cannot read property 'category_name' of undefined

И никак не могу разобраться в чем проблема... запутался в общем. Понимаю что решение кроется на самом видном месте, но... видно не судьба найте это самое место)

Answer 1

Изначально ваша data это пустой массив [].

Вы делаете асинхронный запрос в componentDidMount. При первом рендере ваш data будет пустым массивом. И вы хотите взять первый элемент массива и его ключи.

Для того чтобы такого не произошло, вам нужно перед console.log(data[0].category_name) сделать проверку: data.length !== 0

READ ALSO
Рендер JS вьюхи для AJAX Rails

Рендер JS вьюхи для AJAX Rails

У меня есть showhtml

102
Как сделать прокрутку div на jquery?

Как сделать прокрутку div на jquery?

я по нажатию на один блок div, динамически создаю текстовый блок в котором сообщения, и соответственно есть прокрутка! как сделать чтоб этот...

83
Как получить картинку из input в electronjs

Как получить картинку из input в electronjs

Я почти не работал с nodejs а тем более с electronjsПоэтому не понимаю как происходит передача файлов

95
Позиционирование. Текст на фото

Позиционирование. Текст на фото

Есть фото и текстФото превью, поэтому размер всегда одинаковый

105