微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过从页面移动到另一个页面来解决反应分页问题

如何解决如何通过从页面移动到另一个页面来解决反应分页问题

我设置了一个逻辑来使用我从端点 API 获取的数据在 react 中创建分页,其中包含我在此 UI 中显示的 5 个对象,然后我创建了一个我实现的函数 pageCount进入我的反应分页组件,当我点击移动到第二页时,它移动到最后一页,下一页,以前它们也不起作用。

我研究了很多来解决问题,但没有找到任何解决方案?

这个问题从何而来?

谢谢

function App() {
  
  //states
  const [yogaCourses,setYogaCourses] = useState([]);
  const [isLoading,setIsLoading] = useState(true);
  const [levels,setLevels] = useState([]);
  const [level,setLevel] = useState('');
  const [pageNumber,setPageNumber] = useState(0);

  //Paginate react 
  const coursePerPage = 2;

  // const PageVisited = numberPage * coursePerPage;
  const pageCount = Math.ceil(yogaCourses.length / coursePerPage);
  console.log(pageCount);

  //Track changes on each numberPage and display the data 
  useEffect(()=> {
    setYogaCourses(yogaCourses.slice(pageNumber * 2,(pageNumber + 1) * 2))
  },[pageNumber]);

  //To the next Page
  const pageChange = ({selected}) => {
    setPageNumber(selected);
  }

  //levelChangeHandler 
  const levelChangeHandler = ({value}) => {
      setLevel(value);
  }

  //Filter by Levels // stateless
  const filterLevels = (level) => {
    return yogaCourses.filter((singleLevel)=> level ? singleLevel.level === level : true);
  }

  //Function to fetch the data from the API
  const GetCourses = async () => {
    const response = await axios.get(url)
    const {data} = response;
    return data;
  }

//UseEffect to run the function on every render
  useEffect(()=> {
    const GetCoursesYoga = async () => {
      const result = await GetCourses();
      setYogaCourses(result);
      setLevels(Array.from(new Set(result.map((result)=> result.level))));
    } 
    GetCoursesYoga();
  },[]);


  //check if the we got response
  useEffect(()=> {
    if(yogaCourses.length > 0) {
      setIsLoading(false);
    }
  },[yogaCourses])
  

  if(isLoading) {
    return (
      <Loading/>
    )
  } 
  else {
    return (
      <main>
        <div className="title">
                <h2>YOUR PRACTICE REIMAGINED</h2>
            </div>
        <LevelsFilter levels={levels} onChange={levelChangeHandler}/>
        <YogaCourses yogaCourses= {(filterLevels(level)).slice(0,2)}/>
        <ReactPaginate
        prevIoUsLabel = {"PrevIoUs"}
        nextLabel = {"Next"}
        pageCount = {pageCount}
        onPageChange= {pageChange}
        />
      </main>
      );
  }

}

export default App;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。