V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ruxuan1306  ›  全部回复第 7 页 / 共 16 页
回复总数  318
1  2  3  4  5  6  7  8  9  10 ... 16  
#29 楼第一句描述不准确,#30 楼补充修正了。

如果难以看懂,就好好读#20 楼的那篇博文。
对于 React 每一个渲染帧:
1State 变化触发 React 虚拟 DOM 渲染,整个虚拟 DOM 树渲染完毕后,启动协调(对齐虚拟 DOM 到浏览器 DOM ),协调完毕后,开始异步执行上一帧 Effect 的析构函数,最后再执行本帧所有的 Effect 函数。

注意到了吗,因为本帧的 Effect 回收函数实际在下一帧前执行,也就是在上一帧协调完成的时刻,虽然上一帧的 State 已经渲染上屏用户可见了,但此时上一帧 Effect 的析构函数还没执行,注册在浏览器的还是上一帧的 cb 函数。
如果此时浏览器触发的 wheel 事件,上一帧的那个 cb 还困在自己过去的闭包,setCount 就还在用上一帧的 count 。
楼主代码大概是 Effect 异步顺序导致旧渲染帧的 Effect 后执行了。
楼上那篇超长博文很有价值阅读。
监听器一般只设置一次。


https://codesandbox.io/s/fervent-taussig-x3mdkq?file=/src/App.jsx

```
import { useEffect, useState, useRef, useCallback } from "react";

import "./styles.css";

const useWheel = (divRef, count, setCount) => {
const countRef = useRef(0);
countRef.current = count; // 每次 count 变化存入所有渲染帧共享的空间

const callback = useCallback(
// cb 的闭包被冻结,但可以通过所有渲染帧共享的 ref 获取变化
(ev) => {
ev.preventDefault();
setCount(countRef.current + Math.floor(Math.abs(ev.deltaY / 5)));
},
[setCount]
);

useEffect(() => {
const el = divRef.current; // useEffect 是协调之后异步触发,此时 divRef 必然已被填充
if (!el) return; // 除非该节点渲染错误
el.addEventListener("wheel", callback, { passive: false }); // 仅设置一次监听器
return () => el.removeEventListener("wheel", callback); // 仅取消一次监听器
}, [divRef, callback]);
};

export const Main = (props) => {
let [count, setCount] = useState(0);
let divs = new Array(25000)
.fill(0)
.map((v, i) => <div key={i + count}>{i + count}</div>);

const refDiv = useRef(null);
useWheel(refDiv, count, setCount); // ref 作为参数传入语义上更好
return <div ref={refDiv}>{divs}</div>;
};

export default function App() {
return (
<div className="App">
<Main />
</div>
);
}
```
2022-11-10 05:30:23 +08:00
回复了 stroh 创建的主题 问与答 现在还有没有好用的同步笔记?
最近国内也有个类似 notion 的叫 flowus
2022-11-02 21:46:39 +08:00
回复了 Hopkins 创建的主题 问与答 关于一个垃圾背景想润🇨🇦的提问:
[打算跟无良移民中介死磕,以后义务解答加拿大移民问题:没法帮你填坑但可以帮你躲坑,最烦忽悠和骗子 20221027]
BV1RV4y1G7da
2022-11-01 21:35:36 +08:00
回复了 a33291 创建的主题 宽带症候群 获取到的 ipv6 地址无法 ping 通
在路由器下能 ping 通 PC1 吗
2022-10-31 22:06:09 +08:00
回复了 secsilm 创建的主题 分享创造 Benford's law 与 COVID19
国内确诊人数肯定是远高于卫健委统计值的,就和失业率一样。
ETH2 算力脱钩之后,感觉就像与黄金脱钩的美元,本周 ETH/BTC 刚好大涨,我或许可以换 BTC 。
2022-10-30 00:31:54 +08:00
回复了 Xymmh 创建的主题 宽带症候群 目前网站的 IPv6 支持程度
这是哪个插件,挺有意思
2022-10-29 20:59:09 +08:00
回复了 Jimmyisme 创建的主题 宽带症候群 如何部署远程控制服务器?
Next Terminal 是一个轻量级堡垒机系统,支持 RDP 、SSH 、VNC 、Telnet 、Kubernetes 协议。
2022-10-28 20:34:35 +08:00
回复了 LnTrx 创建的主题 程序员 b 站一个介绍 IPv6 的视频火了,但是问题也很多
@aphorism 第 45 任美国总统非常赞同。
2022-10-28 20:20:20 +08:00
回复了 yukunZhan9 创建的主题 问与答 请教一下,关于 ipv6
@XIU2 家庭网关路由设备上要允许外向内的 IPv6 转发,不然就只能内部主动往外建连。

比如我会在 OpenWRT 上开启一个转发,这样在公司 WiFi 下就可以用 DDNS 域名加密直连回家,避免摸鱼流量被网管看到:
ip6tables -A FORWARD -p tcp --dport 1088 -j ACCEPT
2022-10-28 02:54:23 +08:00
回复了 tool2d 创建的主题 随想 我终究还是小看了 AI
绘图 AI 的诞生降低了生产一张画的社会必要劳动时间,降低了画中蕴含的无差别的人类劳动。

此时,如果分配制度健康,全体画手都能享受到这种技术进步带来的劳动时间降低。
比如从原先每天工作 8 小时,降到每天 4 小时、甚至 2 小时。
这些被解放出的时间可以让艺术家思考更有创意的元素组合或构图,反馈给 AI 训练,正向循环良性发展。

但如果分配制度有问题,比如资本主义下,则会变成少数画手沦为天天加班改手失去思考的 tagger ,多数画手失业离开,AI 失去更有创意的输入,生成的东西来来回回总是训练集内容的线性组合,最终停滞不前。


最终,又回到了马克思主义基本原理:
生产力决定生产关系,生产关系反作用于生产力。
适合当前生产力的生产关系促进生产力的发展,不适合当前生产力的生产关系抑制生产力的发展。
2022-10-24 12:26:24 +08:00
回复了 MoRanjiang 创建的主题 问与答 高数学得很迷茫
就算做深度学习,最高深的也就是个偏导数。
科学计数法,十的几次方前面乘的那个数。
感觉读着累,是不是无衬线字体好点,你看 V2EX 就是无衬线字体。
2022-10-02 15:07:51 +08:00
回复了 fanfanli2022 创建的主题 问与答 回顾一下我的七年,还有更好的路可以走吗?
近亲结婚会生出畸形儿,思想也是,当你自我封闭接受的信息量过少,你的思想就会近亲繁殖。

我认为贴主缺少唯物主义世界观,深圳多彩的高中和国外文艺片里世界里美好都是上层建筑,你看不到背后的经济基础,以及为什么他们有这个经济基础。

不过这很正常,我也偏远小城,小学就上外网,学了点同龄人都不懂的技术、知道点政党黑料就觉觉醒高人一等,但实际根本没有自己的思考,别人说什么我就信什么。

我真正开始对这个世界有自己的判断是 22 岁借着考研看了马克思原理的网课,徐涛那个。
马原理是哲学,不是中特社那种东西,是高度抽象的一种帮你认识世界的工具。
能让你分清什么话是对的,什么话是错的;话里哪部分是对的,哪部分是错的;以及同样的话在什么条件下是对的,在什么条件下是错的。

我们做技术的一般都鄙视政治这些狗屁空话,我中学时也是从来不听。但马原,我认为是我人生前 22 年学到最有价值的东西。

我高中本科天天看知乎,同一个问题下,看到这个答主观点我觉得很对,往下一滑,看到一个相反的观点我又觉得很对。如果贴主也处在我当时的这种困境,那我建议,尽早给自己装备一套用来看待世界的工具,早学早受益。
iPad Pro2 ,回头出三手残值高点,安卓平板买到手流动性很差。
1  2  3  4  5  6  7  8  9  10 ... 16  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2789 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 03:52 · PVG 11:52 · LAX 20:52 · JFK 23:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.