React - content not loading until refreshed - state management issue
P粉809110129
P粉809110129 2023-08-17 18:55:35
0
1
350

The data doesn't load until I refresh the page. I think the problem is state management but can't seem to get it to work. Any help is greatly appreciated!

When a user registers an account and they log into the session, all of the user's posts should be rendered. However, in my case it doesn't render until I refresh the page.

client/src/context/ContentContext.js

import { createContext, useContext, useEffect, useState } from "react"; import { ErrorContext } from "./ErrorContext"; const ContentContext = createContext({}); const ContentProvider = ({children}) => { const { setErrors } = useContext(ErrorContext); const [contents, setContents] = useState([]); useEffect(() => { fetch('/posts') .then(resp => { if (resp.ok) { resp.json().then(data => { setContents(data); }); } }) .catch(errors => { setErrors(errors); }); }, [setErrors]) const addPost = (newPost) => { setContents([...contents, newPost]); } const editPost = (newPost) => { const updatedContentList = contents.map(post => { if (newPost.id === post.id) { return newPost } else { return post; } }); setContents(updatedContentList); } const deletePost = (id) => { const updatedContentList = contents.filter(post => post.id !== id) setContents(updatedContentList); } return ( {children} ) } export { ContentContext, ContentProvider }

client/src/posts/PostDetail.js

import { useContext, useEffect, useState } from "react"; function PostDetail () { const { setErrors } = useContext(ErrorContext); const { user } = useContext(UserContext); const { contents, deletePost } = useContext(ContentContext); const postId = parseInt(useParams().id); const post = contents.find(post => post.id === postId); useEffect(() => { fetch(`/posts/${post.id}/likes`) .then(resp => resp.json()) .then(data => { setLiked(data.liked); }) .catch(error => { setErrors(error) }) }, [post.id, setErrors]) } export default PostDetail;


P粉809110129
P粉809110129

reply all (1)
P粉005134685

I think it should be fine:

import React, { useContext, useEffect, useState } from "react"; import { ErrorContext } from "./ErrorContext"; import { AuthContext } from "./AuthContext"; const ContentProvider = ({ children }) => { const { setErrors } = useContext(ErrorContext); const { isLoggedIn } = useContext(AuthContext); const [contents, setContents] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (isLoggedIn) { fetch('/posts') .then((resp) => { if (resp.ok) { resp.json().then((data) => { setContents(data); setLoading(false); }); } else { setLoading(false); setErrors("Err"); } }) .catch((error) => { setLoading(false); setErrors(error); }); } }, [isLoggedIn, setErrors]); return (  {loading ? 

加载中...

: children}
); }; export { ContentProvider };
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!