Пытаюсь вытащить из API сервиса данные и вставить их в компонент.
Вот код:
class App extends Component {
constructor() {
super();
this.state = {
dataObj : {}
}
}
componentDidMount() {
fetch("https://api.topvisor.ru/v2/json/get/positions_2/history", {
method: 'POST',
headers: {
'User-Id' : '11111',
'Authorization' : '5b10f6bf67f433e2fa0c',
'Content-type' : 'application/json'
},
body: JSON.stringify({
'group_folder_id_depth' : 1,
'project_id' : 561448,
'regions_indexes' : [76],
'fields' : ['name','id','tags','target','group_name'],
'type_range' : 2,
'date1' : '2018-06-25',
'date2' : '2018-07-04',
'count_dates' : 31,
'limit' : 100,
'offset' : 0,
'show_headers' : 1,
'show_exists_dates' : 1,
'show_visitors' : 1,
'show_top_by_depth' : 10,
})
})
.then(response => {
response.json();
})
.then(data => {
let objcts = data.results.map((obj) => {
return (
<li key={obj.results}>
{obj.results.keywords.name}
</li>
)
})
this.setState({dataObj: data});
console.log('state' + this.state.dataObj);
});
}
render() {
return (
<div className="App">
<ul>
</ul>
</div>
);
}
}
export default App;
Ошибки:
TypeError: Cannot read property 'results' of undefined
Для кода:
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor() {
super();
this.state = {
dataObj : {}
}
}
componentDidMount() {
fetch("https://api.topvisor.ru/v2/json/get/positions_2/history", {
method: 'POST',
headers: {
'User-Id' : '44583',
'Authorization' : '5b80f6bf27f633e4fa0c',
'Content-type' : 'application/json'
},
body: JSON.stringify({
'group_folder_id_depth' : 1,
'project_id' : 561448,
'regions_indexes' : [76],
'fields' : ['name','id','tags','target','group_name'],
'type_range' : 2,
'date1' : '2018-06-25',
'date2' : '2018-07-04',
'count_dates' : 31,
'limit' : 100,
'offset' : 0,
'show_headers' : 1,
'show_exists_dates' : 1,
'show_visitors' : 1,
'show_top_by_depth' : 10,
})
})
.then(response => {
response.json();
})
.then(data => {
let objcts = data.results.map((obj) => {
return (
<li key={obj.results}>
</li>
)
})
this.setState({dataObj: data});
console.log('state' + this.state.dataObj);
});
}
render() {
return (
<div className="App">
<ul>
{this.state.dataObj}
</ul>
</div>
);
}
}
Ошибки:
Objects are not valid as a React child (found: object with keys {}). If you meant to render a collection of children, use an array instead.
in ul (at App.js:55)
in div (at App.js:54)
in App (at index.js:7)
Я мало чего соображаю в React, поэтому подскажите хотя бы ссылочки, где можно было бы подсмотреть. Готовое решение тоже хорошо)
Первое: у вас ошибка в синтаксисе
.then(response => {
response.json();
})
Это стрелочная функция и в вашем случае они ничего не возвращает
// либо так
.then(response => {
return response.json();
})
// либо так
.then(response => response.json())
Второе: ну в общем, я не понимаю, зачем задавать конкретный вопрос про технологию, которую ты в принципе не понимаешь? Можно потратить один день на то что бы почитать про React
и тогда второй ошибки не было бы.
React
не умеет просто так выводить объекты: либо строка, либо компонент, либо null
.
Поэтому как-то парсите ваше объект и выводите отдельными св-вами, либо пишите компонент, который принимает ваш dataObj
и уже там делает с ним то, что нужно
render() {
return (
<div className="App">
<ul>
// если someProp строка, то вот так можно
{this.state.dataObj.someProp}
</ul>
</div>
);
}
Вот при обработке данных вы создаете массив, но потом не используете его
let objcts = data.results.map((obj) => {
return (
<li key={obj.results}>
</li>
)
})
Делайте тоже самое в рендере и выводите именно этот массив
render() {
return (
<div className="App">
<ul>
{data.results.map((obj) =>
<li key={obj.id}>{obj.prop}</li>
)}
</ul>
</div>
);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужна помощь в поиске плагина для webpack 3 который будет "пробегать" по указанной в опциях директории, содержащий svg-файлы и компилить файл формата...
Возможно ли импортирование внешних скриптов из уже скомпилированного бандла через webpack
Есть файл firstjs на чистом js, который возвращает объект, например, data