Github.com/rrousselGit/flutter_hooks(開始URL: https://github.com/rrousselGit/flutter_hooks?tab=readme-ov-file#existing-hooks)の翻訳及び補足をしてあります。
本ブログの(上記flutter_hooksの)翻訳および解説の目次頁(構成上のトップページ)は次のURLになります。
本頁は、上記のうちの、「About hot-reload」の章の翻訳および解説頁になります。
About hot-reload
Hooks はインデックスから取得されるため、リファクタリング中にホット・リロードを行うとアプリケーションが壊れてしまうと考えるかもしれない。
HookWidgetは、Hooks で動作するためのデフォルトのホット・リロード動作をオーバーライドします。
一方、それでも、フックの状態がリセットされる状況もあります。
次のようなHooks のリストを考えてみよう:
useA();
useB(0);
useC();
次に、ホット・リロードを実行した後にHookBのパラメータを編集したとする:
useA();
useB(42);
useC();
ここではすべてがうまくいき、すべてのフックがその状態を維持している。
useBのパラメータを0から42に変更した場合、hot-reload後もuseA、useB、useCの各フックは正しく機能し、状態が維持されます。(理由:インデックスに変更を加えたことにならないため)
ここで、HookBを削除した場合を考えてみよう。
useA();
useC();
この状況では、HookAはその状態を維持するが、HookCはハードリセットされる。 これは、リファクタリング後にホット・リロードが実行されると、インパクトされた最初の行以降のフックがすべて破棄されるために起こる。 つまり、HookCはHookBの後に置かれたので、ディスポされることになる。
この場合、useBが削除されると、useAは状態を維持しますが、useCはインデックスがずれるために状態がリセットされます(hard reset)。これは、リファクタリング後にhot-reloadが行われた場合、変更が加えられた行以降のすべてのフックが破棄されるためです。