“从不”类型上不存在属性“值”。在 mui 中使用 useRef 挂钩时
Posted
技术标签:
【中文标题】“从不”类型上不存在属性“值”。在 mui 中使用 useRef 挂钩时【英文标题】:Property 'value' does not exist on type 'never'. when use useRef hook in mui 【发布时间】:2020-08-11 23:26:22 【问题描述】:我正在使用material UI构建登录和注册页面,使用useRef
返回一个TextFiled引用实例,并使用xxxRef.current.value
获取输入值。
我可以顺利运行我的项目,并且可以正确获取value
,但是控制台总是提醒我:
Property 'value' does not exist on type 'never'.
这是我的代码sn-ps:
const accountRef = useRef();
<TextField
variant="outlined"
margin="normal"
required
fullWidth
id="account"
label="Account"
name="account"
autoComplete="account"
autoFocus
defaultValue=account
inputRef=accountRef
/>
const payload =
account: accountRef.current?.value ?? '',
password: passwordRef.current?.value ?? '',
nickname: nicknameRef.current?.value ?? '',
;
【问题讨论】:
【参考方案1】:useRef
在 TypeScript 中使用时是通用的,因此您可以定义引用的元素类型,如 const ref = useRef<Type>();
查看 MaterialUI 中 inputRef
属性的类型定义:
/**
* Pass a ref to the `input` element.
*/
inputRef?: React.Ref<any>;
因此,对于修复,您可以像这样定义参考:
const accountRef = useRef<any>();
但是 ref 是通过组件内部的输入字段传递的,更好的类型是:
const accountRef = useRef<htmlInputElement>();
【讨论】:
学到了一些东西 :) 类似于useState<any>
谢谢!【参考方案2】:
使用 useRef() 时,正确的答案应该是使用正确的 Type (HTMLInputElement):
const inputRef = useRef<HTMLInputElement>();
const [caretPosition, setCaretPosition] = useState<number | null>(null);
const updateCaretPosition = () =>
inputRef.current && setCaretPosition(inputRef.current.selectionStart);
;
【讨论】:
【参考方案3】:请注意,还有其他类型可以添加到 useRef。
可能还有其他类型:
HTMLElement
HTMLFormElement
number
string
等等……
useRef 通常用于使用 HTML 元素的引用,但它也可以用于存储数据。
【讨论】:
以上是关于“从不”类型上不存在属性“值”。在 mui 中使用 useRef 挂钩时的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript 错误 - React mui MenuItem 上不存在属性组件
“ObjectConstructor”类型上不存在属性“值”