소스 검색

disable use_future on the server

Jonathan Kelley 1 년 전
부모
커밋
0fd7799bc2
3개의 변경된 파일5개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 0
      packages/core/src/virtual_dom.rs
  2. 1 0
      packages/hooks/src/use_future.rs
  3. 2 3
      packages/signals/src/rc.rs

+ 2 - 0
packages/core/src/virtual_dom.rs

@@ -448,6 +448,8 @@ impl VirtualDom {
 
             // Hold a lock to the flush sync to prevent tasks from running in the event we get an immediate
             // When we're doing awaiting the rx, the lock will be dropped and tasks waiting on the lock will get waked
+            // We have to own the lock since poll_tasks is cancel safe - the future that this is running in might get dropped
+            // and if we held the lock in the scope, the lock would also get dropped prematurely
             self.runtime.acquire_flush_lock();
 
             match self.rx.next().await.expect("channel should never close") {

+ 1 - 0
packages/hooks/src/use_future.rs

@@ -21,6 +21,7 @@ where
     let mut callback = use_callback(move || {
         let fut = future();
         spawn(async move {
+            flush_sync().await;
             state.set(UseFutureState::Pending);
             fut.await;
             state.set(UseFutureState::Complete);

+ 2 - 3
packages/signals/src/rc.rs

@@ -1,6 +1,5 @@
 use dioxus_core::prelude::{
-    consume_context, consume_context_from_scope, current_scope_id, has_context, needs_update_any,
-    provide_context, schedule_update, schedule_update_any, try_consume_context, ScopeId,
+    current_scope_id, has_context, needs_update_any, provide_context, ScopeId,
 };
 use generational_box::{GenerationalBoxId, SyncStorage};
 use rustc_hash::{FxHashMap, FxHashSet};
@@ -16,7 +15,7 @@ use crate::{CopyValue, RcList, Readable, Writable};
 /// When the ReactiveContext drops, it will remove itself from the the associated contexts attached to signal
 #[derive(Clone, Copy, PartialEq, Eq)]
 pub struct ReactiveContext {
-    pub inner: CopyValue<Inner, SyncStorage>,
+    inner: CopyValue<Inner, SyncStorage>,
 }
 
 thread_local! {