diff --git a/packages/yew-agent/src/scope_ext.rs b/packages/yew-agent/src/scope_ext.rs index 6120062f9..eb36dc344 100644 --- a/packages/yew-agent/src/scope_ext.rs +++ b/packages/yew-agent/src/scope_ext.rs @@ -99,7 +99,7 @@ where W: Worker + 'static, { let inner = self - .context::>((|_| {}).into()) + .context::>>((|_| {}).into()) .expect_throw("failed to bridge to agent.") .0 .create_bridge(callback); diff --git a/packages/yew-agent/src/worker/hooks.rs b/packages/yew-agent/src/worker/hooks.rs index 19745e64d..fbe7d3090 100644 --- a/packages/yew-agent/src/worker/hooks.rs +++ b/packages/yew-agent/src/worker/hooks.rs @@ -15,7 +15,7 @@ pub struct UseWorkerBridgeHandle where T: Worker, { - inner: WorkerBridge, + inner: Rc>, ctr: UseReducerDispatcher, } @@ -84,7 +84,7 @@ where { let ctr = use_reducer(BridgeIdState::default); - let worker_state = use_context::>() + let worker_state = use_context::>>() .expect_throw("cannot find a provider for current agent."); let on_output = Rc::new(on_output); @@ -106,7 +106,7 @@ where }); UseWorkerBridgeHandle { - inner: (*bridge).clone(), + inner: bridge, ctr: ctr.dispatcher(), } } diff --git a/packages/yew-agent/src/worker/provider.rs b/packages/yew-agent/src/worker/provider.rs index b452729d0..229acc248 100644 --- a/packages/yew-agent/src/worker/provider.rs +++ b/packages/yew-agent/src/worker/provider.rs @@ -46,7 +46,7 @@ where id: usize, spawn_bridge_fn: Rc WorkerBridge>, reach: Reach, - held_bridge: Rc>>>, + held_bridge: RefCell>>>, } impl fmt::Debug for WorkerProviderState @@ -63,13 +63,13 @@ where W: Worker, W::Output: 'static, { - fn get_held_bridge(&self) -> WorkerBridge { + fn get_held_bridge(&self) -> Rc> { let mut held_bridge = self.held_bridge.borrow_mut(); match held_bridge.as_mut() { Some(m) => m.clone(), None => { - let bridge = (self.spawn_bridge_fn)(); + let bridge = Rc::new((self.spawn_bridge_fn)()); *held_bridge = Some(bridge.clone()); bridge } @@ -88,20 +88,6 @@ where } } -impl Clone for WorkerProviderState -where - W: Worker, -{ - fn clone(&self) -> Self { - Self { - id: self.id, - spawn_bridge_fn: self.spawn_bridge_fn.clone(), - reach: self.reach, - held_bridge: self.held_bridge.clone(), - } - } -} - impl PartialEq for WorkerProviderState where W: Worker, @@ -141,7 +127,7 @@ where id: get_next_id(), spawn_bridge_fn, reach: *reach, - held_bridge: Rc::default(), + held_bridge: Default::default(), }; if *reach == Reach::Public && !*lazy { @@ -152,8 +138,8 @@ where }; html! { - > context={(*state).clone()}> + >> context={state.clone()}> {children} - >> + >>> } }