我想知道如何使异步 setState 同步工作。我正在做一个分页。但我想每次按上一个和下一个按钮时导入 5 个帖子。但是,但它总是只有在我首先按两次按钮时才有效。
这是我的代码。<Forum.js> - 组件
export default function Forum() {
const [page, setPage] = useState(1);
const [list, setList] = useState([]);
const getData = async () => {
try {
const res = await axios.get(` ${FORUM_MOCK_API}?_page=1&_limit=5`);
console.log(res.data[1].id);
setList(res.data);
} catch (error) {
alert(error);
}
};
const nextPost = async (e) => {
const { name } = e.target;
try {
if (name === 'prevBtn' && page === 1) return;
if (name === 'prevBtn') {
const res = await axios.get(
`${FORUM_MOCK_API}?_page=${page - 1}&_limit=5`,
);
setList(res.data);
setPage(page - 1);
} else if (name === 'nextBtn') {
const res = await axios.get(`${FORUM_MOCK_API}?_page=${page}&_limit=5`);
setList(res.data);
setPage(page + 1);
}
} catch (error) {
alert(error);
}
};
useEffect(() => {
getData();
setPage(page + 1);
setPage(page - 1);
}, []);
return (
<ForumCon>
<PostWrap>
{list.map((post) => {
return (
<Post
key={post.id}
title={post.title}
tag={post.tag.name}
time={time}
content={post.content}
onClick={(e) => goToDetail(post.id)}
/>
);
})}
<div className="pageBtns">
<SmallButton
text="prev"
onClick={(e) => nextPost(e)}
name="prevBtn"
/>
<SmallButton
text="next"
onClick={(e) => nextPost(e)}
name="nextBtn"
/>
</div>
</PostWrap>
</ForumCon>
);
}
<SmallButton.js> -- 组件
export default function SmallButton({ text, onClick, name }) {
return (
<SmallButtonCon onClick={onClick} name={name}>
{text}
</SmallButtonCon>
);
}