Observe-only
observe-only の Area は tick() から None を返します。最初の tick で ObserveRange が作られますが、EffectRange は作られません。
ObserverArea
ObserverArea は、継承した observe() が受け取った最新のスナップショットを保持します。独自の get_snapshot() メソッドは、観察した内容のシーケンスをコピーして呼び出し側に返します。
from hydrangea.context import NativeContent
from hydrangea.context.area import Area, AreaInvokeTiming
class ObserverArea(Area):
def __init__(self) -> None:
super().__init__(invoke_timing=AreaInvokeTiming.deferrable)
def tick(self) -> None:
return None
def get_snapshot(self) -> list[NativeContent]:
return list(self._observe_snapshot)
P.S. これは浅いコピーです。プロバイダー固有の要素は共有されたままなので、読み取り専用として扱ってください。要素を変更する場合は、変更するネストしたデータも含めて、先に明示的に独立したコピーを作成してください。