yo16 / sql_parse_client_202407

using Vite
MIT License
0 stars 0 forks source link

クエリ2の後1を実行すると、前の高さが残る #8

Closed yo16 closed 2 months ago

yo16 commented 3 months ago

2 と同じ問題再来。

ColumnBoxを実装する前までは起きていなかった気がするけど、とにかく今は起きる。

image

4の後に1でも、columnだけだけど、同様。 image

原因は、非同期処理のタイミングの問題と思われる。難しい。

yo16 commented 3 months ago

7 実装中に発生した。

yo16 commented 3 months ago

2つの対策を実施

  1. 親へのサイズ変更通知は、フックの中でやらない(フックが重なったとき、どちらかが捨てられている気がするから)
  2. widthとheightを分けない(独立して変化することはないが、フックが2度同時に発生して、不正な動作を招いている気がするから)
yo16 commented 2 months ago

フック通知の関係ではなく(少なくともそれだけではなく)、 LineageCanvas.tsx でuseEffect内でtableStructsを更新していたことが原因だった。 useEffectで更新される前に、一度以前のtableStructsで描画され、その際に子要素たちのuseStateを通りstateが初期化され、useEffecttableStructsが更新された後にもう一度描画されるときにはuseStateの初期化が行われないことが根本原因。

対応は、初めてのLineageCanvasの描画時に、tableStructsを正しく更新されることなので、useEffectではなくuseMemotableStructsを更新するように変更した。

(子たちを、2度目の描画でも初期化することは本質的な対応ではない)