#37647·react

[编译器错误]: Rust 后端将用户文本解码为类似 `__SURROGATE_XXXX__` 的单个替代字符

作者: kakiuwang-ui创建于 2026年9月17日更新于 2026年9月17日

这是什么问题?

  • React Compiler Core(JS输出不正确,或优化后您的应用操作不正确)

链接到 repro

没有游乐场链接:仅会影响Rust后端("babel-plugin-react-compaler-Rust"). 下面的固定部分在 " main " (2b19aec)上用 " yarn snap -- -- Rust " 复制。

重新确定步骤

Rust桥在AST JSON中将单人代词编码为QQSURROGATE XXXX 正文(sanitize JsonSurgentes' inbridge.ts')。 解码器,JsString: from marker string' on the Rust的一侧和`在回来的路上恢复JsonSurgentes',转出** ** QQSURROGATEQQQ 文本为代词,包括用户实际所写的文本. 看上去像标记的现有文本永远不会被逃脱,所以它也会被解码.

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 从“ 共享运行时间” 导入{stringify} ;

函数 foo () { 返回 < 标定值 {} [' SURROGATE D83D ']} />; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

导出缩略图 ENTYPOINT = { fn: foo, (法语). 段落:[], 是成份: 虚假,

  • ;

`Yarn snap-Rust':

非遗忘( 预期) : (类型:OK)

{>"值": [" SURROGATE D83D "]/div" 忘记: (种类: OK) {"值": ["\ud83d"]/div]


弦会悄悄地变成孤独的代词,没有出错. 当文本由被折叠的片段所构建时,例如"'-SURROGATE " +"D83D " 或模板正文,也会发生同样的情况. TS后端不受影响. 只有大写十六进制符合标记模式 。

任何带内文字标记都需要自己逃出,因此修复这表示改变两侧的线条格式. 我可以看到两个选择:

1. 编码前保留标记并逃离已存在的类似标记的文字(例如将字面的QQSURROGATEQQQ前缀重写为单独的出逃标记). 然后在`从 marker string'、`to marker string'和`restoreJsonSurgentes'中撤销这一逃逸。 这是一个小的改变,但所有四项职能都必须同意。
2. 停止将单个代词作为正文发送出:将其从带子中传出(例如作为JSON旁边的位置和代码单位列表),或者使用一个塞尔德可以直接读取的编码. 这消除了歧义,但是对桥的改变更大.

乐于在有首选方法后发出公关.

这个虫子多久发生一次?

每一次

你在使用什么版本的反射?

主页(2b19aec)

您使用的 React 编译器的哪个版本 ?

主端(2b19aec), Rust 后端