-
-
Notifications
You must be signed in to change notification settings - Fork 50.4k
Expand file tree
/
Copy pathuse_effect_simulation.py
More file actions
39 lines (30 loc) · 1.01 KB
/
use_effect_simulation.py
File metadata and controls
39 lines (30 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""
Simulation of a simple useEffect-like behavior in Python.
This demonstrates executing a function when a dependency changes.
Reference:
https://en.wikipedia.org/wiki/Reactive_programming
"""
from typing import Callable, Any
def use_effect_simulation(callback: Callable[[], None], dependency: Any) -> None:
"""
Executes the callback when the dependency changes.
>>> calls = []
>>> def cb():
... calls.append("called")
>>> use_effect_simulation(cb, 1)
>>> use_effect_simulation(cb, 1)
>>> use_effect_simulation(cb, 2)
>>> calls
['called', 'called']
"""
if not hasattr(use_effect_simulation, "_prev"):
use_effect_simulation._prev = None # type: ignore
if use_effect_simulation._prev != dependency:
callback()
use_effect_simulation._prev = dependency
if __name__ == "__main__":
def example():
print("Effect triggered!")
use_effect_simulation(example, 1)
use_effect_simulation(example, 1)
use_effect_simulation(example, 2)