[编译器错误]: 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 后端
内容来源: react/react