Skip to content

Commit 4f059a8

Browse files
committed
Add on_set callback for side effects
1 parent b673c81 commit 4f059a8

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

reacttrs/reactive.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ def __init__(
2222
init: bool = False,
2323
always_update: bool = False,
2424
compute: bool = True,
25+
on_set: Callable[[Reactable, str, ReactiveType], None] | None = None,
2526
) -> None:
2627
self._default = default
2728
self._init = init
2829
self._always_update = always_update
2930
self._run_compute = compute
31+
self._on_set = on_set
3032

3133
def _initialize_reactive(self, obj: Reactable, name: str) -> None:
3234
"""Initialized a reactive attribute on an object.
@@ -129,6 +131,9 @@ def __set__(self, obj: Reactable, value: ReactiveType) -> None:
129131
if self._run_compute:
130132
self._compute(obj)
131133

134+
if callable(self._on_set):
135+
self._on_set(obj, self.name, value)
136+
132137
@classmethod
133138
def _check_watchers(cls, obj: Reactable, name: str, old_value: Any):
134139
"""Check watchers, and call watch methods / computes
@@ -226,9 +231,11 @@ def __init__(
226231
*,
227232
init: bool = True,
228233
always_update: bool = False,
234+
on_set: Callable[[Reactable, str, ReactiveType], None] | None = None,
229235
) -> None:
230236
super().__init__(
231237
default,
232238
init=init,
233239
always_update=always_update,
240+
on_set=on_set,
234241
)

0 commit comments

Comments
 (0)