除了绑定 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 shakukansp 2022-05-06 14:06:34 +08:00 那你一个组件里要调 1 万个 timer 呢 |
3 ruxuan1306 2022-05-06 14:09:29 +08:00/span> 我猜你家喜欢在楼道换鞋 |
![]() | 5 westoy 2022-05-06 14:11:56 +08:00 你不怕你写嗨了在外部变量域把这个变量一把梭哈了啊 global variables are evil 啊 |
![]() | 6 ethusdt 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? |