Skip to content

Commit 08bb5f6

Browse files
Merge master into use-effect-examplegit push origin use-effect-exampleMerge branch 'master' into use-effect-example
2 parents 7591306 + 6ae5134 commit 08bb5f6

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"""
2+
Simulation of a simple useEffect-like behavior in Python.
3+
4+
This demonstrates executing a function when a dependency changes.
5+
Reference:
6+
https://en.wikipedia.org/wiki/Reactive_programming
7+
"""
8+
9+
from typing import Callable, Any
10+
11+
12+
def use_effect_simulation(callback: Callable[[], None], dependency: Any) -> None:
13+
"""
14+
Executes the callback when the dependency changes.
15+
16+
>>> calls = []
17+
>>> def cb():
18+
... calls.append("called")
19+
>>> use_effect_simulation(cb, 1)
20+
>>> use_effect_simulation(cb, 1)
21+
>>> use_effect_simulation(cb, 2)
22+
>>> calls
23+
['called', 'called']
24+
"""
25+
if not hasattr(use_effect_simulation, "_prev"):
26+
use_effect_simulation._prev = None # type: ignore
27+
28+
if use_effect_simulation._prev != dependency:
29+
callback()
30+
use_effect_simulation._prev = dependency
31+
32+
33+
if __name__ == "__main__":
34+
def example():
35+
print("Effect triggered!")
36+
37+
use_effect_simulation(example, 1)
38+
use_effect_simulation(example, 1)
39+
use_effect_simulation(example, 2)

0 commit comments

Comments
 (0)