修复输入区受控回写用滞后渲染的 props 清空用户草稿
- apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx 的受控同步由 useLayoutEffect 承担:宿主对草稿的回显晚于编辑器提交,被动 effect 可能在上一次渲染的 props 上延迟执行,读到旧 value 加新编辑器状态后重建整份草稿,把刚输入的内容清掉并形成来回清空 - 补注释说明该 effect 必须与本次提交同帧执行,以及直接改成 content 单事实源前的行为约束
This commit is contained in:
+8
-1
@@ -41,6 +41,7 @@ import {
|
||||
useCallback,
|
||||
useEffect,
|
||||
useImperativeHandle,
|
||||
useLayoutEffect,
|
||||
useMemo,
|
||||
useRef,
|
||||
useState,
|
||||
@@ -874,7 +875,13 @@ function ResourceReferenceEditor({
|
||||
|
||||
// 受控聊天入口在清空/恢复草稿时同步编辑器;普通输入变更若已与当前内容一致则不重建,
|
||||
// 避免每个按键都把光标跳到末尾。
|
||||
useEffect(() => {
|
||||
//
|
||||
// 这里必须是 layout effect:`value` / `references` 只是宿主对编辑器草稿的回显,宿主状态
|
||||
// 更新会晚于编辑器的 Lexical 提交。用被动 effect 时,一次滞后渲染的回调可能在用户已经
|
||||
// 继续输入之后才执行,它读到的是旧 `value` 加新编辑器状态,就会把整份草稿重建掉
|
||||
// (编辑器再通过 onChange 把空草稿写回宿主,来回清空)。layout effect 与本次提交同帧执行,
|
||||
// 读到的 props 与编辑器状态属于同一次提交。
|
||||
useLayoutEffect(() => {
|
||||
if (value === undefined && references === undefined) return;
|
||||
const desiredValue = value ?? '';
|
||||
const desiredRefs = references ?? [];
|
||||
|
||||
Reference in New Issue
Block a user