首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >useEffect不能removeEventListener

useEffect不能removeEventListener
EN

Stack Overflow用户
提问于 2019-04-26 05:05:58
回答 1查看 1.6K关注 0票数 2
代码语言:javascript
复制
function HomeList(props) {
  const [{data,isLastPage}, setData] = useState({
      data: [],
      isLastPage: false
  });
  const getData = () => {
    flag = false;
    request("/api/app/recommend", {
      params: {
        list_code: props.listcode,
        page,
        preview: 0
      }
    }).then(res => {
      let tmp = (res.msg === "lastpage" || isLastPage) ? true : false;
      if(tmp) {
        window.removeEventListener("scroll", hd);
      }
      setData(data => ({data:data.data.concat(res.data),isLastPage:tmp}));
      flag = true;
    });
    page++;
  };

  const onScroll = () => {
    const target = window.document.documentElement;
    const offsetH = target.offsetHeight;
    const scrollH = target.scrollHeight;
    const triggerH = scrollH * 0.5;
    const scrollTop = window.pageYOffset;
    //滚动过页面高度一半加一屏高度后加载数据
    if (scrollH - offsetH - scrollTop < triggerH) {
      if (flag) {
        getData();
      }
    }
  };

  const hd = throttle(onScroll, 500);
  useEffect(() => {
    getData();
    window.addEventListener("scroll", hd);
    return () => {
      window.removeEventListener("scroll", hd);
      page = 1;
      flag = true;
    };
  }, []);

  useLayoutEffect(() => {
      //here !!!!!!!!!!!!
      if(data.length < 18 && data.length > 0 && !isLastPage) {
          getData();
      }
  },[data])

当api msg是'lastpage‘时,我想删除滚动eventListener,但是响应钩子在每个useEffect中创建了一个新的函数hd。如果useLayoutEffect中的最后一页发生更改,则removeEventListener无法工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 05:21:40

我们需要侦听isLastPage上的更改,并且只有当isLagePage为false时才添加事件侦听器。

代码语言:javascript
复制
useEffect(() => {
  if (!isLastPage) {
    document.addEventListener('scroll', scroll);
  }
  return () => document.removeEventListener('scroll', scroll);
}, [isLastPage]);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55861104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档