@@ -109,39 +109,41 @@ def dispatch(
109109@overload
110110def use_effect (
111111 function : None = None ,
112- args : Sequence [Any ] | ellipsis | None = ...,
112+ dependencies : Sequence [Any ] | ellipsis | None = ...,
113113) -> Callable [[_EffectApplyFunc ], None ]:
114114 ...
115115
116116
117117@overload
118118def use_effect (
119119 function : _EffectApplyFunc ,
120- args : Sequence [Any ] | ellipsis | None = ...,
120+ dependencies : Sequence [Any ] | ellipsis | None = ...,
121121) -> None :
122122 ...
123123
124124
125125def use_effect (
126126 function : Optional [_EffectApplyFunc ] = None ,
127- args : Sequence [Any ] | ellipsis | None = ...,
127+ dependencies : Sequence [Any ] | ellipsis | None = ...,
128128) -> Optional [Callable [[_EffectApplyFunc ], None ]]:
129129 """See the full :ref:`Use Effect` docs for details
130130
131131 Parameters:
132132 function:
133133 Applies the effect and can return a clean-up function
134- args:
135- Dependencies for the effect. If provided the effect will only trigger when
136- these args change.
134+ dependencies:
135+ Dependencies for the effect. The effect will only trigger if the identity
136+ of any value in the given sequence changes (i.e. their :func:`id` is
137+ different). By default these are inferred based on local variables that are
138+ referenced by the given function.
137139
138140 Returns:
139141 If not function is provided, a decorator. Otherwise ``None``.
140142 """
141143 hook = current_hook ()
142144
143- args = _try_to_infer_closure_args (function , args )
144- memoize = use_memo (args = args )
145+ dependencies = _try_to_infer_closure_values (function , dependencies )
146+ memoize = use_memo (dependencies = dependencies )
145147 last_clean_callback : Ref [Optional [_EffectCleanFunc ]] = use_ref (None )
146148
147149 def add_effect (function : _EffectApplyFunc ) -> None :
@@ -221,34 +223,39 @@ def dispatch(action: _ActionType) -> None:
221223@overload
222224def use_callback (
223225 function : None = None ,
224- args : Sequence [Any ] | ellipsis | None = ...,
226+ dependencies : Sequence [Any ] | ellipsis | None = ...,
225227) -> Callable [[_CallbackFunc ], _CallbackFunc ]:
226228 ...
227229
228230
229231@overload
230232def use_callback (
231233 function : _CallbackFunc ,
232- args : Sequence [Any ] | ellipsis | None = ...,
234+ dependencies : Sequence [Any ] | ellipsis | None = ...,
233235) -> _CallbackFunc :
234236 ...
235237
236238
237239def use_callback (
238240 function : Optional [_CallbackFunc ] = None ,
239- args : Sequence [Any ] | ellipsis | None = ...,
241+ dependencies : Sequence [Any ] | ellipsis | None = ...,
240242) -> Union [_CallbackFunc , Callable [[_CallbackFunc ], _CallbackFunc ]]:
241243 """See the full :ref:`Use Callback` docs for details
242244
243245 Parameters:
244- function: the function whose identity will be preserved
245- args: The identity the ``function`` will be udpated when these ``args`` change.
246+ function:
247+ The function whose identity will be preserved
248+ dependencies:
249+ Dependencies of the callback. The identity the ``function`` will be udpated
250+ if the identity of any value in the given sequence changes (i.e. their
251+ :func:`id` is different). By default these are inferred based on local
252+ variables that are referenced by the given function.
246253
247254 Returns:
248255 The current function
249256 """
250- args = _try_to_infer_closure_args (function , args )
251- memoize = use_memo (args = args )
257+ dependencies = _try_to_infer_closure_values (function , dependencies )
258+ memoize = use_memo (dependencies = dependencies )
252259
253260 def setup (function : _CallbackFunc ) -> _CallbackFunc :
254261 return memoize (lambda : function )
@@ -269,49 +276,54 @@ def __call__(self, func: Callable[[], _StateType]) -> _StateType:
269276@overload
270277def use_memo (
271278 function : None = None ,
272- args : Sequence [Any ] | ellipsis | None = ...,
279+ dependencies : Sequence [Any ] | ellipsis | None = ...,
273280) -> _LambdaCaller :
274281 ...
275282
276283
277284@overload
278285def use_memo (
279286 function : Callable [[], _StateType ],
280- args : Sequence [Any ] | ellipsis | None = ...,
287+ dependencies : Sequence [Any ] | ellipsis | None = ...,
281288) -> _StateType :
282289 ...
283290
284291
285292def use_memo (
286293 function : Optional [Callable [[], _StateType ]] = None ,
287- args : Sequence [Any ] | ellipsis | None = ...,
294+ dependencies : Sequence [Any ] | ellipsis | None = ...,
288295) -> Union [_StateType , Callable [[Callable [[], _StateType ]], _StateType ]]:
289296 """See the full :ref:`Use Memo` docs for details
290297
291298 Parameters:
292- function: The function to be memoized.
293- args: The ``function`` will be recomputed when these args change.
299+ function:
300+ The function to be memoized.
301+ dependencies:
302+ Dependencies for the memoized function. The memo will only be recomputed if
303+ the identity of any value in the given sequence changes (i.e. their
304+ :func:`id` is different). By default these are inferred based on local
305+ variables that are referenced by the given function.
294306
295307 Returns:
296308 The current state
297309 """
298- args = _try_to_infer_closure_args (function , args )
310+ dependencies = _try_to_infer_closure_values (function , dependencies )
299311
300312 memo : _Memo [_StateType ] = _use_const (_Memo )
301313
302314 if memo .empty ():
303315 # we need to initialize on the first run
304316 changed = True
305- memo .args = () if args is None else args
306- elif args is None :
317+ memo .deps = () if dependencies is None else dependencies
318+ elif dependencies is None :
307319 changed = True
308- memo .args = ()
320+ memo .deps = ()
309321 elif (
310- len (memo .args ) != len (args )
311- # if args are same length check identity for each item
312- or any (current is not new for current , new in zip (memo .args , args ))
322+ len (memo .deps ) != len (dependencies )
323+ # if deps are same length check identity for each item
324+ or any (current is not new for current , new in zip (memo .deps , dependencies ))
313325 ):
314- memo .args = args
326+ memo .deps = dependencies
315327 changed = True
316328 else :
317329 changed = False
@@ -338,10 +350,10 @@ def setup(function: Callable[[], _StateType]) -> _StateType:
338350class _Memo (Generic [_StateType ]):
339351 """Simple object for storing memoization data"""
340352
341- __slots__ = "value" , "args "
353+ __slots__ = "value" , "deps "
342354
343355 value : _StateType
344- args : Sequence [Any ]
356+ deps : Sequence [Any ]
345357
346358 def empty (self ) -> bool :
347359 try :
@@ -368,11 +380,11 @@ def _use_const(function: Callable[[], _StateType]) -> _StateType:
368380 return current_hook ().use_state (function )
369381
370382
371- def _try_to_infer_closure_args (
383+ def _try_to_infer_closure_values (
372384 func : Callable [..., Any ] | None ,
373- args : Sequence [Any ] | ellipsis | None ,
385+ values : Sequence [Any ] | ellipsis | None ,
374386) -> Sequence [Any ] | None :
375- if args is ...:
387+ if values is ...:
376388 if isinstance (func , FunctionType ):
377389 return (
378390 [cell .cell_contents for cell in func .__closure__ ]
@@ -382,7 +394,7 @@ def _try_to_infer_closure_args(
382394 else :
383395 return None
384396 else :
385- return cast ("Sequence[Any] | None" , args )
397+ return cast ("Sequence[Any] | None" , values )
386398
387399
388400_current_life_cycle_hook : Dict [int , "LifeCycleHook" ] = {}
0 commit comments