特性: 实现关于在更新闭包中使用节点变量的 lint 规则
作者: levensta创建于 2026年9月1日更新于 2026年9月1日
标签enhancement
□ 说明
在某些情况下,更新中的一个变量可能会用节点关闭,特别是在React背景下. 一个巧妙的例子: {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? const [sourceNode, set SourceNode] = 使用状态 < 逻辑 节点 QQ 无效 >( 无效) c. [编辑] = 使用LexicalComposerContext ();
Const handle Click( ) {{ { 如果 (! sourceNode) 返回; 编辑器. update (()) #{ 源节点.select End ();
- ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
这个代码的隐患是,尽管检查是否有 " 源节点 " ,但在更新过程中,由于某种原因,它可能在Lexical Station中缺失。 正确的模式是通过`异接'方法进行核对
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
- 如果(!)源节点返回;
+ 如果(!sourceNode QQ!sourceNode.isAttaged ()) 返回;或通过 $getNodeByKey 存储密钥并检查
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? -const [sourceNode, set SourceNode] = 使用状态 < 逻辑 节点 QQ 无效 >( 无效) +const [sourceNodeKey, set SourceNodeKey] = 使用状态 () c. [编辑] = 使用LexicalComposerContext ();
Const handle Click( ) {{ {
- const sourceNode = $getNodeByKey(source NodeKey) ; 2. 如果 (! sourceNode) 返回; 编辑器. update (()) #{ 源节点.select End ();
- ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
否则,如果节点脱离状态,则[将投出例外 (https://GitHub.com/facebook/lexical/blob/v0.50.0/packages/lexical/src/LexicalNode.ts#L1393):Lexical 节点在活动编辑器状态中不存在. 避免在从编辑 State.read/editor.update的嵌入式关闭之间使用相同的节点引用.
□ 影响
一个提示规则可以防止这种潜在的错误并允许更安全的代码处理状态. 不仅在更新过程中,而且在读取状态时,也可能出现类似的错误内容来源: facebook/lexical