Мы не совсем уверены, каков ваш ответ API, но вы что-то делаете в журнале как-то неправильно.Вы присваиваете posts
переменной, но пытаетесь использовать ее в методе .map
.
Я предполагаю, что ваш ответ API выглядит примерно так:
{
results: [
{ id: 1, name: "foo" },
{ id: 2, name: "bar" },
{ id: 3, name: "baz" },
],
};
Это данные, и так как вы назначаете data.results
как сообщения, именно поэтому я предполагаю такой ответ.Я предоставляю варианты, которые вы можете попробовать.Здесь я имитирую запрос API с помощью функции, поэтому не беспокойтесь об этой части, пожалуйста.
Просто зарегистрируйте весь массив results
.
const data = {
results: [
{ id: 1, name: "foo" },
{ id: 2, name: "bar" },
{ id: 3, name: "baz" },
],
};
const fakeRequest = () =>
new Promise(resolve => setTimeout(() => resolve(data), 1000));
class App extends React.Component {
componentDidMount() {
fakeRequest()
.then( data => {
console.log( data.results );
})
}
render() {
return <div>Look the console. We are logging the whole array.</div>;
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
Вы можете отобразить массив и зарегистрировать каждый элемент по одному
Поскольку мы просто хотим регистрировать элементынам не нужно использовать map
здесь, достаточно forEach
.
const data = {
results: [
{ id: 1, name: "foo" },
{ id: 2, name: "bar" },
{ id: 3, name: "baz" },
],
};
const fakeRequest = () =>
new Promise(resolve => setTimeout(() => resolve(data), 1000));
class App extends React.Component {
componentDidMount() {
fakeRequest()
.then( data => {
data.results.forEach( post => console.log( post) )
// or as a shorthand
// data.results.forEach(console.log)
})
}
render() {
return <div>Look the console. We are logging each post one by one.</div>;
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
Установите свое состояние с результатами и отобразите его в методе рендеринга
В большинстве случаев выхотеть сделать.Просто регистрации недостаточно, как мы знаем.
const data = {
results: [
{ id: 1, name: "foo" },
{ id: 2, name: "bar" },
{ id: 3, name: "baz" },
],
};
const fakeRequest = () =>
new Promise(resolve => setTimeout(() => resolve(data), 1000));
class App extends React.Component {
state = {
posts: [],
}
componentDidMount() {
fakeRequest()
.then( data => {
this.setState( { posts: data.results})
})
}
render() {
if ( !this.state.posts.length ) {
return <p>No posts yet</p>
}
return (
<div>
{
this.state.posts.map( post =>
<div key={post.id}>
<p>{post.id}</p>
<p>{post.name}</p>
</div>
)
}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>