#javascript #reactjs #react-router #jsx
#javascript #reactjs #реагировать-маршрутизатор #jsx
Вопрос:
Эй, ребята, я новичок в react js, и я получаю эту ошибку TypeError: Cannot read property 'map' of undefined
, я попробовал консоль.журнал объекта, и он показывает все результаты, но я не могу отобразить его в браузере, так как появляется эта ошибка. В чем может быть причина?
const search = 'api/posts/search'
const [appState, setAppState] = useState({
search: '',
posts: [],
});
const [error, setError] = useState('')
useEffect(() => {
axiosInstance.get(search '/' window.location.search)
.then((res) => {
const allPosts = res.data;
setAppState({ posts: allPosts });
setError('');
// console.log(res.data);
})
.catch((errors) => {
setAppState({});
setError('Something went wrong!')
})
}, [setAppState])
{/* console.log(appState.posts.results) */}
{appState.posts amp;amp; appState.posts.results.map((post) => {
return (
<div key={post.id}>
<h5>{post.title}</h5>
</div>
)}
})}
Спасибо
Комментарии:
1. что делает
console.log(appState.posts.results)
журналы?2. Он показывает правильные результаты из серверной части. вот так
0: {id: 11, title: "The previous demo of this website", post_date: "2020-10-14T22:43:31.217511 02:00",…}
3. Ваш начальный
appState.posts
[]
код равен true-y (поэтому проверкаappState.posts amp;amp;
вообще не помогает), но не имеетresults
prop (so.map
находится на undefined, согласно ошибке). Неясно, действительно ли это соответствует тому, что вы получаете от своего API.4.
appState.posts.results
результаты из-за разбивки на страницы, которую я использую с серверной частью, так как это происходит из серверной части. вот так{count: 1, next: null, previous: null, results: Array(1)}
5. Потому что это массив, но реальное значение — это объект. Так что либо это должно быть, например
{ results: [] }
, илиnull
/undefined
.
Ответ №1:
Похоже, вы пытаетесь выполнить рендеринг из сообщений до получения результатов. вы можете изменить свой код рендеринга на
{appState.posts amp;amp; appState.posts.results amp;amp; appState.posts.results.map((post) => {
return (
<div key={post.id}>
<h5>{post.title}</h5>
</div>
)}
})}
Комментарии:
1. Да, это идеально. работает, как и ожидалось. Большое спасибо!