学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
正文从这开始~
当我们用一个null
值初始化一个ref
,但在其类型中不包括null
时,就会发生"Cannot assign to ‘current’ because it is a read-only property"错误。为了解决该错误,请在ref
的类型中包含null
。比如说,const ref = useRef(null)
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Lt4jKQ5-1660237758154)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0dc5f7bec50a42d9bcb629457b2ed066~tplv-k3u1fbpfcp-watermark.image?)]
这里有个例子来展示错误是如何发生的。
// App.tsx
import {useEffect, useRef} from 'react';
const App = () => {
const ref = useRef(null);
useEffect(() => {
// ⛔️ Error: Cannot assign to 'current' because it is a read-only property.ts(2540)
ref.current = 'hello';
}, []);
return (
hello worldh2>
div>
);
};
export default App;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
上面例子的问题在于,当我们将null
作为初始值传递到useRef
钩子中时,并且我们传递给钩子的泛型中没有包括null
类型,我们创建了一个不可变的ref
对象。
正确的泛型
为了解决该错误,我们必须在传递给钩子的泛型中包括null
类型。
// App.tsx
import {useEffect, useRef} from 'react';
const App = () => {
// 👇️ include null in the ref's type
const ref = useRefnull>(null);
useEffect(() => {
ref.current = 'hello';
}, []);
return (
hello worldh2>
div>
);
};
export default App;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
在ref
的类型中,我们使用联合类型来包括null
类型,这使它成为可变ref
对象。
现在这个例子中ref
的类型是字符串或null
,它的current
属性可以赋值为这两种类型中的任意一种的值。
DOM元素
如果你的引用指向一个DOM元素,情况也是一样的。如果你需要改变ref
的current
属性的值,你必须将钩子的类型定为 const ref = useRef(null)
。
注意,如果你不直接赋值给它的current
属性,你不必在 ref
的类型中包含 null
。
// App.tsx
import {useEffect, useRef} from 'react';
const App = () => {
const ref = useRef(null);
useEffect(() => {
ref.current?.focus();
}, []);
return (
div>
);
};
export default App;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
上述例子中的ref
是用来聚焦input
元素的。因为没有对其.current
属性进行赋值,所以没有必要在其类型中包含null
。
-
相关阅读:
2022年11月23日——jQuery——T1(基础选择器与表单选择器)
Rust6.1 Writing Automated Tests
工程派工单,建筑工程派工单
深度剖析集成学习Xgboost(续)
自己对 RepVGG 的一点理解
Python爬虫案例入门教程(纯小白向)——夜读书屋小说
unity urp 棉麻织物渲染
JS6种继承方式
【操作系统】之gcc编译
openbmc开发39:webui开发—增加风扇控制页面
-
原文地址:https://blog.csdn.net/m0_56069948/article/details/126296023