2025年12月12日金曜日

Ark UI 5.12.1にてネストされたモーダルを閉じると親の影響を受ける

<症状1>

Ark UI 5.12.1にてネストされたモーダルを閉じると親の影響を受ける。

最新版: 5.15.0でも未修正。


<症状2>

取引先ピッカー自体は表示されていますが、親のArk UIダイアログのフォーカストラップが効いていて、ダイアログ外(今のPartnerPicker配置場所)へフォーカスが移動できないため、入力が一切できません。なので PartnerPickerを親ダイアログの中(DialogContentの内側)に戻して、フォーカストラップの範囲内に入れます。これで入力できるようになります。



<原因>

ArkUIでネストモーダルの処理が正常に組まれていない。


<対応>

GitHubのissueで見つけた回避策を試します。

setTimeoutを使ってダイアログを閉じる方法です。


問題の原因: Ark UIの既知のバグ

GitHubのissue(#2557)で報告されている問題と同じ。

症状

  • ネストされたダイアログ親Dialog → 子Dialog)で、子Dialogを閉じると親Dialogの動作に影響する
  • Ark UI v2以降から存在するバグ
  • trapFocus(フォーカストラップ)の処理に問題がある

今回のケース

ProcurementDialog(親)→ PartnerPicker(子)
子を閉じると、親のボタンが効かなくなる

結論

原因判定
こっちのソース記述の問題❌ No
Ark UIの構造上の問題✅ Yes
こっちのUI構造の問題❌ No(ネストは一般的なパターン)

対応策

  1. 現状維持 - PartnerPickerだけdivベースにして、他Ark UIを維持(今の状態)
  2. 全削除 - すべてのダイアログをdivベースに書き換え




<まとめ>
結構複雑なUIを作る時、ArkUI(ヘッドレスUI)使わない方がいい。
ぶっちゃけ現代のLLMだとArkUIを使うメリットが薄い気がする。
無駄にバグが増えるだけ。

ウィンドウにSVG装飾をしているからよかれと思ってArkUIにしたが、問題が続発しまくる。
簡単な事しかしないならArkUIでいいけど、reactとかvueとかsvelteとか頻繁に変えたりするにはメリットだが、時間がかかって無駄なバグを生むことが多い。
シンプルな構成の方がLLMにはいいんじゃないか?
ステート管理だって各フレームワーク側に乗せた方が、管理しやすいと思うのだが・・・

もう作ってしまったが、ArkUIに依存しないものを作ってコードを比較してみよう。

0 件のコメント:

コメントを投稿

あいうえお