@@ -252,7 +252,7 @@ def create_context(
252
252
return Context (name , default_value )
253
253
254
254
255
- _UNDEFINED = object ()
255
+ _UNDEFINED = cast ( Any , object () )
256
256
257
257
258
258
class Context (Generic [_StateType ]):
@@ -267,18 +267,15 @@ def __call__(
267
267
* children : Any ,
268
268
value : _StateType = _UNDEFINED ,
269
269
key : Key | None = None ,
270
- ) -> (
271
- # users don't need to see that this is a ContextProvider
272
- ComponentType
273
- ):
270
+ ) -> ContextProvider [_StateType ]:
274
271
return ContextProvider (
275
272
* children ,
276
273
value = self .default_value if value is _UNDEFINED else value ,
277
274
key = key ,
278
275
type = self ,
279
276
)
280
277
281
- def __repr__ (self ):
278
+ def __repr__ (self ) -> str :
282
279
return f"{ type (self ).__name__ } ({ self .name !r} )"
283
280
284
281
@@ -292,13 +289,14 @@ def use_context(context: Context[_StateType]) -> _StateType:
292
289
provider = hook .get_context_provider (context )
293
290
if provider is None :
294
291
return context .default_value
292
+ subscribers = provider ._subscribers
295
293
296
294
@use_effect
297
295
def subscribe_to_context_change () -> Callable [[], None ]:
298
- provider . subscribers .add (hook )
299
- return lambda : provider . subscribers .remove (hook )
296
+ subscribers .add (hook )
297
+ return lambda : subscribers .remove (hook )
300
298
301
- return provider .value
299
+ return provider ._value
302
300
303
301
304
302
class ContextProvider (Generic [_StateType ]):
@@ -310,18 +308,18 @@ def __init__(
310
308
type : Context [_StateType ],
311
309
) -> None :
312
310
self .children = children
313
- self .value = value
314
311
self .key = key
315
- self .subscribers : set [LifeCycleHook ] = set ()
316
312
self .type = type
313
+ self ._subscribers : set [LifeCycleHook ] = set ()
314
+ self ._value = value
317
315
318
316
def render (self ) -> VdomDict :
319
317
current_hook ().set_context_provider (self )
320
318
return vdom ("" , * self .children )
321
319
322
320
def should_render (self , new : ContextProvider [_StateType ]) -> bool :
323
- if self .value is not new .value :
324
- for hook in self .subscribers :
321
+ if self ._value is not new ._value :
322
+ for hook in self ._subscribers :
325
323
hook .set_context_provider (new )
326
324
hook .schedule_render ()
327
325
return True
0 commit comments