react / react/react-native

CJK (Chinese/Japanese/Korean) IME input is fundamentally broken on iOS Fabric — affecting all New Architecture users since 0.76

未关闭
#56,463 7 条评论 10 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Needs: Attention Needs: Repro
主要语言
C++
星标
127k
派生
25.3k
平均合并
1 天 23 小时
30 天内合并 PR
4

描述

Description

CJK (Chinese, Japanese, Korean) IME input on iOS TextInput has been broken since the introduction of the New Architecture (Fabric). This affects hundreds of millions of potential users across East Asia — arguably the largest language group using IME-based input.

The issues include:

  • Composition underline disappears or never renders — users cannot see which characters are being composed
  • Composition state is destroyed mid-input — typed characters are lost or corrupted during IME conversion
  • maxLength blocks IME mid-composition — Korean syllable building (ㅎ→하→한) and Chinese Pinyin input are truncated prematurely
  • Controlled value prop interferes with composition — standard React patterns break CJK input entirely

This is not a minor visual glitch — it makes TextInput unusable for CJK languages on Fabric. Users are forced to either disable the New Architecture entirely or build native workarounds.

Steps to reproduce

  1. Create a new React Native project with New Architecture enabled (Fabric)
  2. Add a TextInput component (controlled with value/onChangeText or uncontrolled)
  3. Run on iOS
  4. Switch to a CJK keyboard (Japanese Romaji, Chinese Pinyin, or Korean)
  5. Type text — e.g., "shinkansen" for Japanese, "zhongguo" for Chinese Pinyin, or any Korean syllable
  6. Observe: Composition underline is missing, composition state is destroyed, or characters are corrupted

React Native Version

0.76.5 ~ 0.82+ (all Fabric-enabled versions)

Affected Platforms

  • Runtime - iOS

Areas

  • Fabric - The New Renderer

Output of npx @react-native-community/cli info

System:
  OS: macOS 15.1.1
  CPU: (8) arm64 Apple M2
  Memory: 164.45 MB / 8.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 22.5.1
    path: ~/.nvm/versions/node/v22.5.1/bin/node
  npm:
    version: 10.8.2
    path: ~/.nvm/versions/node/v22.5.1/bin/npm
SDKs:
  iOS SDK:
    Platforms:
      - iOS 18.2
      - macOS 15.2
IDEs:
  Xcode:
    version: 16.2/16C5032a
    path: /usr/bin/xcodebuild
npmPackages:
  react: 18.3.1
  react-native: 0.76.5 ~ 0.82+

(Aggregated from multiple reporters — see #48497 and #55257 for individual environment details)

Stacktrace or Logs

No crash — this is a rendering/input behavior regression.
The IME composition state is silently destroyed by Fabric's synchronous
updateEventEmitter:/updateState: calls and defaultTextAttributes reapplication.

Reproducer

Expo Snack: https://snack.expo.dev/@hujbvf/missing-underline-during-japanese-ime-composition-on-ios?platform=ios

Reproducer repo (from #48497): https://github.com/haruki-m/react-native-text-input-issue

Screenshots and Videos

Reproduction video — Japanese IME composition underline missing (from #55257)

https://github.com/user-attachments/assets/85b9b7a0-ca40-4ac3-bcea-75ef00a636f1

Reproduction video — CJK composition broken (from #48497)

https://github.com/user-attachments/assets/6afb4b71-cb77-406b-a768-8b5fbd775cf7

Fix verification — CJK (Chinese, Japanese, Korean) working correctly after fix (from PR #56082)

https://github.com/user-attachments/assets/50aa22d0-d374-4bbd-a438-d83c3494207d

Fix verification — English no regression (from PR #56082)

https://github.com/user-attachments/assets/5ee0a093-211a-4331-b42e-f902de416cb1


Impact

  • Languages affected: Chinese (Pinyin, Wubi, Zhuyin), Japanese (Romaji, Kana), Korean
  • Versions affected: 0.76.5 through at least 0.81.4 (all Fabric-enabled versions)
  • Workaround: Disable New Architecture, or use a native module workaround
  • User reports: See #48497 (open since Jan 2025, 15+ months) and #55257 (14 👍, open since Jan 2026)

Existing Fix

PR #56082 provides a comprehensive fix addressing 7 distinct root causes in the Fabric TextInput implementation. It includes:

  • 22 native XCTests covering full composition lifecycles for Korean, Japanese, Chinese, and mixed input
  • 18 JS tests covering controlled/uncontrolled components, maxLength interaction, and cross-language switching
  • Manual verification videos demonstrating correct behavior in all four languages (English, Chinese, Japanese, Korean)
  • Detailed root-cause analysis for each of the 7 issues

The PR was submitted on March 13, 2026, test videos were provided upon request on March 19, and it has been waiting for review since then — over 4 weeks with no further feedback.

Why This Needs Attention

  1. New Architecture is now the default — CJK users cannot simply opt out forever
  2. The fix is ready — thoroughly tested, well-documented, and waiting for review
  3. The community is waiting — multiple users in #48497 have reported the same issue over 15 months, with no official fix in sight
  4. East Asian market adoption risk — apps targeting Chinese, Japanese, or Korean users cannot confidently adopt the New Architecture while basic text input is broken

References

  • Original issue: #48497 (Jan 2025)
  • Related issue: #55257 (Jan 2026)
  • Fix PR: #56082 (Mar 2026, awaiting review)

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

首先结合 #48497 和 #55257 中的复现详情,检查 PR #56082。在启用 Fabric 的 iOS 上运行链接的 Expo Snack 或 reproducer,并测试中文、日文和韩文 IME 组合输入。引用的原生 XCTests 和 JS 测试通过,且组合输入在英文环境下正常工作、没有回归,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
react-native
领域
mobile
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
描述清楚
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。