Я получаю ОШИБКУ «posts.map не является функцией», когда я удаляю сообщение

#javascript #reactjs #function #components

#javascript #reactjs #функция #Компоненты

Вопрос:

Я получаю ошибку «posts.map не является функцией this», когда я удаляю сообщение, но если я обновляю страницу, она снова работает нормально, есть какие-нибудь комментарии или советы о том, как это исправить?

функция, с помощью которой я удаляю свой пост:

     const deletePost = (id) => {
        const fetchData = async (id) => {
        await axios.delete('http://localhost:5000/posts/' id);
        setPosts({
            posts: posts.filter(element => element._id !== id)
        })
        };
        fetchData(id);
        // window.location = '/posts';
      };
 

Функция, при которой я получаю ошибку:

       const postList = () => {
            return posts.map(currentPost => {
                return <Post post = {currentPost} deleteExercise={deletePost} key={currentPost._id} />
            })
        };
 

Компонент, который я вызываю, удаляет функцию:

 const Post = props => 
(
    <ul>
        <li>Date: {props.post.createdAt}</li>
        <li>Title: {props.post.title}</li>
        <li>Your Post: {props.post.postBody}</li>
        <li>
            <Link to={'/edit/'   props.post._id}> edit </Link>| <a onClick={() => props.deletePost(props.post._id)} > Delete </a>
        </li>
    </ul>
)
 

Функция, с помощью которой я получаю все свои сообщения из базы данных:

  const [posts, setPosts] = useState([]);
    useEffect(() => {
        const username = localStorage.getItem("username");
        axios.get('http://localhost:5000/posts/')
            .then(post => {
                setPosts(post.data.filter( x => x.username === username))
            })
       }, []);
 

Комментарии:

1. После того, как вы delete что-то сделаете, вы должны это исправить, что произойдет, если возникнет ошибка? Вы все равно фильтруете массив, который является устаревшими данными.

Ответ №1:

кажется, что вы объявляете сообщения как объект:

 setPosts({
        posts: posts.filter(element => element._id !== id)
    })
 

вместо того, чтобы, как вы делаете в выборке :

 setPosts( posts.filter(element => element._id !== id))