26 条回复  ·  2861 次点击
TWorldIsNButThis 小成 5 天前
@ltaoo1o 注释是啥意思,正确方式就是 ref 或者让 effect 依赖 v 啊
ltaoo1o 初学 5 天前
当时出问题的时候,我就意识到是闭包问题了,百分之九十九函数组件的问题就是闭包问题 🤣 我这个代码,从语义上来说非常简单也很实际,「页面初始化后监听回车事件」,用函数组件就是写不出来,用类组件就没有这种问题。 所以我现在写代码都少用 hook ,它改变了代码作为领域知识的意义,变成为框架去改变业务含义,导致现在都是在写框架代码,不是写业务代码。
ltaoo1o 初学 5 天前
@TWorldIsNButThis 我希望代码表达正确的「语义」
ltaoo1o 初学 5 天前
@shintendo #8 是的,我想了很久,无解
ltaoo1o 初学 5 天前
@Torpedo 感谢 🙏🏻
shintendo 小成 5 天前
@ltaoo1o 你说 v 不能放 useRef 里,那可以把 log 放 useRef 里 https://codesandbox.io/p/sandbox/zuo-yong-yu-de-wen-ti-forked-pn425w
TWorldIsNButThis 小成 5 天前
@ltaoo1o class 组件可以是因为 this 就是 ref 啊
ltaoo1o 初学 5 天前
@shintendo #15 起作用的是这个刷新 log 函数的代码吧,而且 log 可能是一个比较复杂的函数,它要拿很多个状态进行处理,这里就要依赖 v1 f v3 等等,容易漏 ``` useEffect(() => { logRef.current = () => { alert(v); }; }, [v]); ```
ltaoo1o 初学 5 天前
@TWorldIsNButThis #16 所以我说函数组件有额外的心智负担,容易出问题,感觉在和框架斗智斗勇 🤣
ljpCN 小成 5 天前
@ltaoo1o 你应该在 input 标签的 onKeyDown 回调里处理你的键盘监听,而不是在 useEffect 里处理
返回顶部