Чтобы использовать map
в JS, данные должны быть массивом.
Внутри catch
вы напрямую присваиваете сообщение об ошибке posts
как setPosts(e.message)
и пытаетесь использовать карту. Вот почему undefined is not a function (near'...posts.map...')
произошло, потому что в это время posts
не является массивом.
Существует несколько способов исправить эту ошибку, но лучше сохранить отдельное состояние для обработки ошибок, как показано ниже,
import React, { useState, useEffect } from "react";
import Axios from "axios";
import { View, Text, ScrollView } from "react-native";
import PhotoPost from "../components/PhotoPost";
const Home = () => {
const [posts, setPosts] = useState([]);
const [error, setError] = useState(false);
useEffect(() => {
Axios.get("http://127.0.0.1:3000/image_post/index")
.then(res => {
setPosts(res.data);
})
.catch(e => {
setError(true);
// log error
console.log(e);
});
}, []);
return (
<ScrollView>
{error ? (
<View>
<Text>Error while loading data ?</Text>
</View>
) : (
posts.map((post, index) => {
return <PhotoPost key={index} post={post} />;
})
)}
</ScrollView>
);
};
export default Home;
Надеюсь, это поможет вам. Не стесняйтесь сомнений.