首页 > 解决方案 > 属性 current 不存在于类型 never - React useRef()

问题描述

我知道那里有很多安静的文章和相关问题,但我来找你寻求帮助,我很难输入一个自定义钩子,它将一个事件侦听器添加到附加的窗口。但我收到了这个错误。

Property 'current' does not exist on type 'never'.

我尝试了很多东西,但似乎没有任何效果,而且我的库无法编译。我想这与启用严格标志有关。

功能如下。

import { useEffect, useRef } from "react";

export function usePatientContextListener(handler: Function, element = window) {
  const savedHandler = useRef<Function>(null);

  useEffect(() => {
    savedHandler.current = handler;
  }, [handler]);

  useEffect(() => {
    savedHandler.current = handler;

    const isSupported = element && element.addEventListener;
    if (!isSupported || savedHandler) return;
    
    const listener = (event: Event) => {
       // eslint-disable-next-line no-extra-boolean-cast
       if (!!savedHandler?.current) {
        savedHandler.current(event)
      }
    };

    window.addEventListener("message", listener, false);

    return () => {
      window.removeEventListener("message", listener);
    };
  }, [element]);
}

此外,当我将 null 作为默认值传递时,我收到另一个错误,指出 current 是只读属性。如果我删除空值,错误就会消失。

Cannot assign to 'current' because it is a read-only property.

我已经尝试了一切,但错误仍然不会消失。如果您有过这种经历或能以任何方式帮助我,我将不胜感激。最后附上错误图片

在此处输入图像描述

标签: reactjstypescriptreact-hooksstrict

解决方案


我不确定你要做什么,但看起来你最好使用 useState 而不是 useRef,后者应该保存一个可变对象,这意味着你可以更新它的属性,但是对象本身预计不会改变(因此出现只读属性错误)。另一方面,useState 用于不可变对象(您替换整个对象,而不是更新其属性)。

“从不”类型上不存在“当前”属性。

这只是意味着您的条件 ( !!savedHandler?.current) 永远不会评估为真。


推荐阅读