【发布时间】:2021-08-11 11:33:36
【问题描述】:
我正在为我的 Web 应用程序使用 react-redux 环境,但我无法进行无限滚动,一旦我到达底部,就会收到无法使用 useEffect 的错误。下面是代码:
import React, { useEffect } from 'react';
import './Homefeed.css';
import StickyNav from '../StickyNav/StickyNav';
import { fetchHomePosts } from '../Redux/HomeFeed-Redux/HomeFeedActionMethods';
import { connect } from 'react-redux';
import PostCell from '../PostCell/PostCell';
import InfiniteScroll from 'react-infinite-scroll-component';
import { useDispatch } from 'react-redux'
function Homefeed({homeposts,fetchHomePosts}) {
var skipper = 0;
let dispatch = useDispatch()
useEffect(()=>{fetchHomePosts(skipper);},[dispatch]);
function MorePosts(){
console.log(homeposts);
console.log("more");
useEffect(()=>{fetchHomePosts(skipper+10);},[]);
}
return homeposts.isLoading ? (<h2>Loading...</h2>) : homeposts.error ? (<h3>{homeposts.error}</h3>) : (
<div className="homefeed-layout">
<title>Home Feed</title>
<StickyNav />
<InfiniteScroll
dataLength={homeposts.homeposts.length}
hasMore={true}
loader={<h3>Loading</h3>}
next={()=>{MorePosts()}}
>
{
homeposts.homeposts?.map((key,index)=> {
var slug = key.attributes.title;
slug = slug.replace(/\s/g, '-');
slug = slug.toLowerCase();
slug = slug.replace(/[^a-zA-Z0-9\-]/g, '');
slug = slug.replace(/(-)\1+/g, '-');
slug = slug.replace(/-$/, '');
slug = slug.replace(/^-/, '');
return(
<div className="content-area" key={index} >
<PostCell
key ={index}
slug = {slug}
postId = {key.id}
title ={key.attributes.title}
likes ={key.attributes.likes}
comments ={key.attributes.comments}
category ={key.attributes.category}
postimageurl = {key.attributes.postImageURL}
handle ={key.attributes.createdBy.attributes.handle}
timestamp = {key.attributes.createdAt}
subtitle = {key.attributes.subtitle}
realName ={key.attributes.createdBy.attributes.realName}
profileImage = {key.attributes.createdBy.attributes.profileImage?._url}
followers = {key.attributes.createdBy.attributes.followers}
posts = {key.attributes.createdBy.attributes.posts}
name = {key.attributes.createdBy.attributes.name}
/>
</div>
)
})
}
</InfiniteScroll>
</div>
)
}
const mapStatetoProps = (state) =>{
return{
homeposts:state.HomePosts
}
}
const mapDispatchtoProps = (dispatch) =>{
return{
fetchHomePosts:(skipper)=>{dispatch(fetchHomePosts(skipper))},dispatch,
}
}
export default connect(mapStatetoProps,mapDispatchtoProps) (Homefeed)
所以这里无限滚动中的下一个道具应该调用更多应该附加到现有数据的数据。 moreposts 函数应该调用 api,但是 react 给我一个错误,说你不能在这个函数中调用 useEffect。
如果我使用 useDispatch(),它会陷入无限循环,有人可以帮帮我吗,我对此很陌生。
【问题讨论】:
标签: reactjs react-redux infinite-scroll