除了绑定 DOM, 发现直接找一个外部变量替代 useRef() 更方便呀? 比如:
例子 1:
function Timer() {
const intervalRef = useRef();
useEffect(() => {
const id = setInterval(() => {
// ...
});
intervalRef.current = id;
return () => {
clearInterval(intervalRef.current);
};
});
// ...
}
替换成:
let _interval = null;
function Timer() {
useEffect(() => {
const id = setInterval(() => {
// ...
});
_interval = id;
return () => {
clearInterval(_interval);
};
});
// ...
}
例子 2:
function usePrevious(val) {
const r = useRef();
useEffect(() => r.current = val);
return r.current;
}
替换成:
let _p = null;
function usePrevious(val) {
useEffect(() => _p = val);
return _p;
}
1
dengqing 2022-05-06 14:05:38 +08:00 2
有没有想过组件会在多个地方使用?
|
2
shakukansp 2022-05-06 14:06:34 +08:00
那你一个组件里要调 1 万个 timer 呢
|
3
ruxuan1306 2022-05-06 14:09:29 +08:00
我猜你家喜欢在楼道换鞋
|
5
westoy 2022-05-06 14:11:56 +08:00
你不怕你写嗨了在外部变量域把这个变量一把梭哈了啊
global variables are evil 啊 |
6
FaiChou OP @shakukansp 本来想实现一个函数 getAPublicVal() 每次调用来返回一个外部变量, 当相同 component 调用时候返回之前的外部变量. 这时候发现实现了一个 useState ..
|
7
gogogo1203 2022-05-06 14:55:29 +08:00
@shakukansp 理论上不存在, React 不推荐超过三百个 DOM Elements.
|
8
shakukansp 2022-05-06 15:00:39 +08:00
|
9
gogogo1203 2022-05-06 15:03:25 +08:00
<><Timer/><Timer/></> 你就知道错了.
|
10
gogogo1203 2022-05-06 15:04:33 +08:00
@shakukansp 理解了, 我也想表达这个意思。
|
11
dany813 2022-05-06 16:35:55 +08:00
全局变量危险啊,万一在其他更改了呢
|
12
gogogo1203 2022-05-06 16:58:55 +08:00
还有一个问题就是 stale closure
|
13
DKrookie 2022-05-06 17:40:45 +08:00
虽然但是,我还是想说定义在组件外部并不是全局变量吧,模块化了除非显示的使用 window. 来定义变量,好像没法定义全局变量吧。
|
15
yazoox 2022-05-07 08:53:06 +08:00
@gogogo1203 有什么方法统计出来,当前打开的页面,项目中有多少个 DOM?
|