【发布时间】:2021-01-12 13:56:32
【问题描述】:
每次我打开一个新的帖子页面时,上一篇帖子的数据都会在屏幕上显示几毫秒,然后显示新数据。 我试图检查帖子是否正在加载并使用 setIsLoading 函数将其设置为状态,但它不起作用。 请看下面的代码:
const PostPage = ({post, setPost, isLoading, setIsLoading}) => {
const location = useLocation()
const pathname = location.pathname.split("/")[2]
useEffect(() => {
setIsLoading(true)
const fetchData = async () => {
let res = await axios.get(`http://localhost:4000/posts/${pathname}`)
const postData = res.data
setPost(postData)
setIsLoading(false)
}
fetchData()
}, [])
return (
<>
{!isLoading && (
<div>
<h1>{post.title}</h1>
<p>{post.text}</p>
</div>
)}
</>
)
}
这些是我的路线:
<Switch>
<Route path="/" exact>
{isLogged && (
<AddPost
posts={posts}
setPosts={setPosts}
postTitle={postTitle}
setPostTitle={setPostTitle}
postText={postText}
setPostText={setPostText}
setIsLoading={setIsLoading}
/>
)}
<div className="posts-row">
{posts.slice(0).reverse().map(post => (
<Post
key={post.id}
id={post.id}
postTitle={post.title}
postText={post.text}
isLogged={isLogged}
posts={posts}
setPosts={setPosts}
/>
))}
</div>
</Route>
<Route path="/posts/:id" exact>
<PostPage
post={post}
setPost={setPost}
isLoading={isLoading}
setIsLoading={setIsLoading}
/>
</Route>
</Switch>
在 App.js 中,我将 isLoading 设置为 true,但它仅适用于第一篇文章。 为了 React,请不要报告我的问题:D
编辑: Post.js
const Post = ({postTitle, postText, isLogged, posts, setPosts, id}) => {
const removePost = async (id) => {
const postArray = posts.filter((post) => (post.id !== id))
let res = await axios.delete(`http://localhost:4000/posts/${id}`)
setPosts(postArray)
}
return (
<div className="post">
<Link to={`/posts/${id}`}>
<strong>
{postTitle}
</strong>
</Link>
<p>{postText}</p>
{isLogged && (
<button onClick={() => removePost(id)}>
????️
</button>
)}
</div>
)
}
【问题讨论】:
-
请显示您的路线
-
我编辑了原帖
标签: reactjs ecmascript-6