Бесконечная прокрутка на домашней странице приложения для социальных сетей с помощью response Js - PullRequest
0 голосов
/ 06 августа 2020

У меня проблемы с добавлением бесконечной прокрутки в свой дом. js для отображения сообщений. Если я отображаю все сообщения напрямую, то при каждом refre sh в мою базу данных (Firebase) не добавляется счетчик чтения. Я хочу ограничить отображение 10-12 сообщений и отображать следующее в соответствии с прокруткой. Как и куда добавить код бесконечной прокрутки и что добавить. Вот мой статус c Home. js. В приведенном ниже коде все сообщения отображаются напрямую:


function Home() {
  const classes = useStyles();
  const [modalStyle] = useState(getModalStyle);
  const [posts, setPosts] = useState([]);
  const [open, setOpen] = useState(false);
  const [openSignIn, setOpenSignIn] = useState(false);
  const [username, setUserName] = useState('');
  const [password, setPassword] = useState('');
  const [email, setEmail] = useState('');
  const [user, setUser] = useState('null');
  const [image, setImage] = useState(null);
    const [progress, setProgress] = useState(0);
    const [url, setUrl] = useState("");


  useEffect(() => {
    const unsubscribe = auth.onAuthStateChanged((authUser) => {
       if (authUser){
         console.log(authUser);
         setUser(authUser);
     
      }
      else {
        setUser(null)

    }
  })
  return() =>{
    unsubscribe(); 
  }

  }, [user, username]);

  useEffect(() => {
    db.collection('posts').orderBy('timestamp','desc').onSnapshot(snapshot => {
      setPosts(snapshot.docs.map(doc =>({
        id: doc.id,
       post: doc.data()
      })));
    })

  }, [])

  return (

    <div className="app">
    
     <div className="app_header">

       <img className="app_headerImage"
       src="https://firebasestorage.googleapis.com/v0/b/inconnect-b0ef1.appspot.com/o/dp%2FLOGO786.png?alt=media&token=adeb1a58-5085-4a3f-b33a-9b6d8078624c"
       />
       
       
         <div className="app_loginContainer">
           <Button onClick={() => auth.signOut()}><Link to='/' >Logout </Link><BsHouseDoorFill/> </Button>
            <a>
            
           <Button > <Link to='/Feed' > Feed</Link> <BsHouseDoorFill/> </Button>
           <Button ><Link to='/Profile' > Profile</Link> <BsHouseDoorFill/> </Button>
           
           <br>
           </br>
           <br>
           </br>
           <Avatar
            className="post_avatar"
            alt='inconnect'
            src="https://i2-prod.mirror.co.uk/incoming/article6393590.ece/ALTERNATES/s615/Daniel-Craig-in-a-new-photoshoot-to-announce-the-release-of-tickets-Bond-film-Spectre.jpg"
            /><h3>Hi {user.displayName}! </h3>
           </a>
         </div> 
  
     </div>
     {user?.displayName ? (
     <Modal className="photodiv"
        open={open}
        
        onClose={() => setOpen(false)}>
          <div  style={modalStyle} className={classes.paper}>

         
          <ImageUpload username={user.displayName} />
  

      
    </div>
     
       
      </Modal>
      ):
      ( <h3>Sorry you need to login to upload and comment</h3>

      )}


     <div className="topload">

         <h1  onClick={() => setOpen(true)}> Wanna post {user.displayName}?</h1>
     </div>
     <Search />
     <div className="app_posts">
        <div className="app_postsLeft">

          {
             posts.map(({id, post}) =>(
             <Post key={id} postId={id} user= {user} username={post.username} caption={post.caption} imageUrl={post.imageUrl}/>
              
             ))
          }
        </div>
        
         </div>

    </div>
      
  );
}

export default Home;

1 Ответ

1 голос
/ 06 августа 2020

Вы можете использовать наблюдатель пересечения https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API Создать компонент и испускать события 'show' или 'hide' - зависит от того, взаимодействует ли наблюдатель с окном просмотра или нет. Извините, мой плохой Engli sh, но я надеюсь, вы меня поймали)

...