为了账号安全,请及时绑定邮箱和手机立即绑定

在 React 中有条件地显示按钮

在 React 中有条件地显示按钮

幕布斯7119047 2023-03-03 13:09:54
我有一个组件可以对博客文章执行分页功能。每次单击“加载更多”按钮时,页面底部都会加载另外五个帖子。不过,我现在对如何解决问题一无所知。问题:单击“加载更多”按钮并且所有可用帖子都可见后,“加载更多”按钮应该消失。代码:const Posts = ({ state }) => {  const [categories, setCategories] = useState([]);  const [categoryId, setCategoryId] = useState();  const [page, setPage] = useState(1);  const [posts, setPosts] = useState([]); // Posts for each category  const [allPosts, setAllPosts] = useState([]); // All posts from all categories  // Get all of the available categories  useEffect(() => {    fetch(state.source.api + "/wp/v2/categories")      .then(response => response.json())      .then(data => {        setCategories(data);      })  }, []);  useEffect(() => {    if (categoryId) {      fetch(state.source.api + "/wp/v2/posts?categories=" + categoryId + "&per_page=5")        .then((response) => response.json())        .then((data) => {          setPosts(data);        });    }  }, [categoryId]);  // Get posts for each category  useEffect(() => {    if (!categoryId) {      return;    }    let url = state.source.api + "/wp/v2/posts?categories=" + categoryId + "&per_page=5";    if (page > 1) {      url += `&page=${page}`;    }    fetch(url)      .then((response) => response.json())      .then((data) => {        setPosts([...posts, ...data]);      });  }, [categoryId, page]);  useEffect(() => {    let url = state.source.api + "/wp/v2/posts?per_page=5";    if (page > 1) {      url += `&page=${page}`;    }    fetch(url)      .then((response) => response.json())      .then((data) => {        setAllPosts([...allPosts, ...data]);      });  }假设最多有 3 页的帖子,一次查看 5 个 - 所以总共 15 个帖子......一旦所有 3 页都可见,我再次点击“加载更多”(即使没有更多帖子可用) ,我收到一个控制台错误... my api... GET /wp/v2/posts?categories=78&per_page=5&page=4 400 (Bad Request),这显然意味着没有要获取的第 4 页,因为没有更多帖子。我认为这需要一个 if 语句,但我不确定我将如何开始编写它。有人有任何意见吗?
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您应该有一个名为 totalPages 的变量,它保存页数,然后比较 totalPages 和页面状态,类似这样:

{page <= totalPages && <button onClick={() => { setPage(page + 1); }}>Load more</button>}

在这种情况下,如果 page 为 3 且 totalPages 为 4,则该按钮将不会显示


查看完整回答
反对 回复 2023-03-03
?
四季花海

TA贡献1811条经验 获得超5个赞

尝试一个名为“react-paginate”的 npm 包,有了它你可以轻松实现分页逻辑而不会弄乱代码,这里是这个包的链接https://www.npmjs.com/package/react-paginate 只需阅读文档,您就可以弄清楚如何执行此操作,但如果您遇到任何问题,请不要犹豫,尽管问我。



查看完整回答
反对 回复 2023-03-03
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信