相关文章推荐
登录

如何在加载时禁用按钮,但不会影响分页功能(React.js)

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2022-07-12
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2022-07-12 01:21

关于React.js中的残疾人问题

我尝试在加载时禁用一个按钮,然后在完成呈现(或者说获取数据)之后,它将启用该按钮。

下面是代码框链接中的示例: https://codesandbox.io/s/data-fetch-example-oc8eh0?file=/src/App.js

例如:每次我单击“第一”、“前一”、“下一步”和“最后”按钮时。当当前加载数据页时, 将禁用所有按钮 (而不仅仅是被单击的按钮)。

谢谢

如果您不能打开链接,下面是代码:

import React,{ useState, useEffect } from "react";
import "./styles.css";
export default function App() {
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(false);
  const [currentPage, setCurrentPage] = useState(0);
  const [postsPerPage, setPostsPerPage] = useState(10);
  useEffect(()=>{
    getData();
  },[])
  async function getData(){
    setLoading(true);    
    const response = await fetch('https://stream-restaurant-menu-svc.herokuapp.com/item?category')
    let actualData = await response.json();
    setPosts(actualData)
    setLoading(false);   
  const indexOfLastPost = (currentPage + 1) * postsPerPage;
  const indexOfFirstPost = indexOfLastPost - postsPerPage;
  const currentPosts = posts.slice(indexOfFirstPost, indexOfLastPost);
    const pageNumbers = [];
    for (let i = 0; i < Math.ceil(posts.length / postsPerPage); i++) {
      pageNumbers.push(i);
    const incrementPageNumber = () => {
      if (currentPage < pageNumbers.length - 1) {
        setCurrentPage((previousPageNumber) => previousPageNumber + 1);
    const decrementPageNumber = () => {
      if (currentPage > 0) {
        setCurrentPage((previousPageNumber) => previousPageNumber - 1);
    // if loading...
  if(loading){
    return <h2>Loading</h2>
  return (
    <div className="App">
      <table className="table">
        <thead>
            <th>ID</th>
            <th>First Name</th>
            <th>Last Name</th>
        </thead>
        <tbody>
          {currentPosts.map((post) => (
              <td key={`${post.id}-id`}>{post.id}</td>
              <td key={`${post.name}-firstName`}>{post.name}</td>
              <td key={`${post.short_name}-lastName`}>{post.short_name}</td>
        </tbody>
      </table>
      <button 
      id='first'
      type='button'
      className='first-page-btn'
      disabled={loading || currentPage === 0}
      onClick={() => {setCurrentPage(0)}}
        first
      </button>
      <button 
      id='previous'
      type='button'
      className='previous-page-btn'
      disabled={loading || currentPage === 0}
      onClick={decrementPageNumber}
        previous
        </button>
      <button 
      id='next'
      type='button'
      className='next-page-btn'
      disabled={loading || currentPage === pageNumbers[pageNumbers.length - 1]}
      onClick={incrementPageNumber}
      </button>
      <button 
      id='last'
      type='button'
      className='last-page-btn'
      disabled={loading || currentPage === 0}
      onClick={() => setCurrentPage(pageNumbers[pageNumbers.length - 1])}
      </button>
 
推荐文章