首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型'clientHeight,scrollHeight,scrollTop‘在'HTMLDivElement \ null’类型上不存在类型记录错误属性,

类型'clientHeight,scrollHeight,scrollTop‘在'HTMLDivElement \ null’类型上不存在类型记录错误属性,
EN

Stack Overflow用户
提问于 2022-06-23 13:46:22
回答 1查看 608关注 0票数 2

我已经为我的滚动函数使用了useRef钩子,我已经设置了HTMLDivElement类型,但是我得到了属性'clientHeight,scrollHeight,scrollTop‘在'HTMLDivElement \ null’类型上不存在,

如果我在useRef上盘旋,上面写着(alias) useRef<HTMLDivElement>(initialValue: HTMLDivElement | null): RefObject<HTMLDivElement> (+2 overloads) import useRef

代码语言:javascript
运行
复制
  const scrollRef = useRef<HTMLDivElement>(null);
  const getActivityFeedOnScroll = () => {
    const {scrollTop, scrollHeight, clientHeight} = scrollRef?.current;
    scrollTop + clientHeight === scrollHeight && fetchNextPage();
  };

如果我喜欢这种方式,类型不会给出错误,但是我想用空保护替换If条件,以使代码更简洁。

代码语言:javascript
运行
复制
 +  const getActivityFeedOnScroll = () => {
+    if (!scrollRef.current) return;
+    const {scrollTop, scrollHeight, clientHeight} = scrollRef.current;
+    if (scrollTop + clientHeight === scrollHeight) fetchNextPage();
+  }; 
EN

Stack Overflow用户

发布于 2022-06-23 17:06:15

据我所知,你根本不能这么做。

想想看,在您的第一个代码块中,您会说{ someStuff } = scrollRef?.current; --如果scrollRef是未定义的或无效的--它不尝试访问当前,这将抛出类似于“未定义类型上不存在属性流”的内容。相反,scrollRef?.current恰好是null,因此{ someStuff }没有任何意义。

如果类型记录语言确实允许您这样做,那么您必须检查someStuff是否没有像这样无效。

代码语言:javascript
运行
复制
  const scrollRef = useRef<HTMLDivElement>(null);
  const getActivityFeedOnScroll = () => {
    const {scrollTop, scrollHeight, clientHeight} = scrollRef?.current;
    if (scrollTop && clientHeight && scrollHeight)
        scrollTop + clientHeight === scrollHeight && fetchNextPage();
  };

这比你的第二个案例更混乱(这是正确的方法)。

总之,如果您的第一个案例没有给出scrollRef?.current上的错误,那么它将在下一行提供给您,在行中使用scrollRef?.current的属性。

您的代码不是更混乱,它没有更多的“样板”,它只是更明确,这是一件好事。当scrollRef.current为空时,您将显式地告诉您的代码该做什么。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72731286

复制
相关文章

相似问题

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