ReactでWebWorker使う
worker は React の理の外である、つまりuseRefを使うべき
これに集約されている
「クラスコンポーネントを使う」という論理展開には同意しかねるが…。
WebWorkerはコンポーネントから見て何であるか?
イベントリスナーを仕掛ける対象
レンダリングツリーの外部に状態を持つオブジェクト
アンマネージドなリソースで、不要になったら手動でterminateする必要がある
「terminateする必要がある」のは、コンポーネントの責務なのか?
エフェクトなのはイベントリスナーの同期であって、ワーカーオブジェクト自体の管理はコンポーネントが直接責任を持つべきエフェクトではないのではないか?
コンテキストで管理するとか、Recoil/Jotaiで管理するとか
1つのコンポーネントに閉じるとしてuseRefを使う手もあるが、「そのコンポーネントが複数作られたらワーカーも複数立ってほしいのか?」と考えると、シングルトンであってほしい気持ちもある
メンタルモデルとしては「実体がクライアントにあるサーバー」みたいな感じで扱いたい