MCPcopy Index your code
hub / github.com/reactive-python/reactpy / add_effect

Function add_effect

src/py/reactpy/reactpy/core/hooks.py:141–171  ·  view source on GitHub ↗
(function: _EffectApplyFunc)

Source from the content-addressed store, hash-verified

139 last_clean_callback: Ref[_EffectCleanFunc | None] = use_ref(None)
140
141 def add_effect(function: _EffectApplyFunc) -> None:
142 if not asyncio.iscoroutinefunction(function):
143 sync_function = cast(_SyncEffectFunc, function)
144 else:
145 async_function = cast(_AsyncEffectFunc, function)
146
147 def sync_function() -> _EffectCleanFunc | None:
148 task = asyncio.create_task(async_function())
149
150 def clean_future() -> None:
151 if not task.cancel():
152 try:
153 clean = task.result()
154 except asyncio.CancelledError:
155 pass
156 else:
157 if clean is not None:
158 clean()
159
160 return clean_future
161
162 async def effect(stop: asyncio.Event) -> None:
163 if last_clean_callback.current is not None:
164 last_clean_callback.current()
165 last_clean_callback.current = None
166 clean = last_clean_callback.current = sync_function()
167 await stop.wait()
168 if clean is not None:
169 clean()
170
171 return memoize(lambda: hook.add_effect(effect))
172
173 if function is not None:
174 add_effect(function)

Callers 1

use_effectFunction · 0.85

Calls 1

add_effectMethod · 0.80

Tested by

no test coverage detected