Имеется серверная часть на 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
И никак не могу разобраться в чем проблема... запутался в общем. Понимаю что решение кроется на самом видном месте, но... видно не судьба найте это самое место)
Изначально ваша data
это пустой массив []
.
Вы делаете асинхронный запрос в componentDidMount
. При первом рендере ваш data
будет пустым массивом. И вы хотите взять первый элемент массива и его ключи.
Для того чтобы такого не произошло, вам нужно перед console.log(data[0].category_name)
сделать проверку: data.length !== 0
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
я по нажатию на один блок div, динамически создаю текстовый блок в котором сообщения, и соответственно есть прокрутка! как сделать чтоб этот...
Я почти не работал с nodejs а тем более с electronjsПоэтому не понимаю как происходит передача файлов