misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.01k stars 1.37k forks source link

Playにおいて、再読み込みボタンを押すかページ遷移から戻ってきた場合に、identifier付きのUiコンポーネントが初期化されず動作もしなくなる #14378

Open Sayamame-beans opened 2 months ago

Sayamame-beans commented 2 months ago

💡 Summary

Related: #13747

再読み込みボタンを押した場合や、ページを遷移してPlayページに戻ってきた場合、Play全体が再読み込みされたように見えますか、Ui系コンポーネントで第二引数(id)を与えているものが初期化されず、更新も反映されなくなる問題があるようです。

どちらの操作でもreset()が呼び出されるため、その中で呼んでいるabort()でこれらが初期化されていないのだろうか…?と予想しています。(registerAbortHandlerしていないとかその辺り…?)

以下のコードは第二引数の有無による挙動差を確認出来るコードです。

let mfm = Ui:C:mfm({
  text: "test with identifier"
}, "identifier")

let mfm2 = Ui:C:mfm({
  text: "test without identifier"
})

Ui:render([
  Ui:C:textarea({
    onInput: @(text){
      mfm.update({text: text})
      mfm2.update({text: text})
    }
  }),
  mfm,
  mfm2
])

デッキ環境でもデフォルトUIでも発生します。 タブの再読み込みと同様に、デッキのウィンドウ単位の再読み込みを行った場合でも正常に初期化されます。

🥰 Expected Behavior

初期化され、変更も反映される

🤬 Actual Behavior

初期化されず、変更が反映されない

📝 Steps to Reproduce

  1. 添付したコードでPlayを作成する
  2. Playを開く
  3. 何らかのテキストを入力し、両方とも変化することを確認する
  4. Play下の再読み込みボタンを押す
  5. identifierがある方のテキストだけ初期化されずにそのままとなっており、入力を行ってもそこから変化しないことが確認出来る

💻 Frontend Environment

* Model and OS of the device(s): any
* Browser: any
* Server URL: https://misskey.niri.la/
* Misskey: 2024.7.0-kinel.1

🛰 Backend Environment (for server admin)

* Installation Method or Hosting Service:
* Misskey:
* Node:
* PostgreSQL:
* Redis:
* OS and Architecture:

Do you want to address this bug yourself?

FineArchs commented 2 months ago

見た感じ、aiscriptの方はちゃんとリセットしているのにcomponentsの方のリセットがされていなさそうですね