@@ -11,10 +11,7 @@ use std::{
1111} ;
1212
1313use dioxus:: prelude:: * ;
14- use dioxus:: {
15- hooks:: { use_memo, use_reactive} ,
16- signals:: CopyValue ,
17- } ;
14+ use dioxus:: signals:: CopyValue ;
1815use dioxus_core:: {
1916 provide_root_context, spawn_forever, use_drop, ReactiveContext , SuspendedFuture , Task ,
2017} ;
@@ -548,7 +545,7 @@ impl<Q: QueryCapability> QueryReader<Q> {
548545}
549546
550547pub struct UseQuery < Q : QueryCapability > {
551- query : Memo < Query < Q > > ,
548+ query : Signal < Query < Q > > ,
552549}
553550
554551impl < Q : QueryCapability > Clone for UseQuery < Q > {
@@ -718,7 +715,7 @@ pub fn use_query<Q: QueryCapability>(query: Query<Q>) -> UseQuery<Q> {
718715
719716 let current_query = use_hook ( || Rc :: new ( RefCell :: new ( None ) ) ) ;
720717
721- let query = use_memo ( use_reactive ! ( |query| {
718+ let mut make_query = |query : & Query < Q > | {
722719 let query_data = storage. insert_or_get_query ( query. clone ( ) ) ;
723720
724721 // Update the query tasks if there has been a change in the query
@@ -730,22 +727,30 @@ pub fn use_query<Q: QueryCapability>(query: Query<Q>) -> UseQuery<Q> {
730727 current_query. borrow_mut ( ) . replace ( query. clone ( ) ) ;
731728
732729 // Immediately run the query if enabled and the value is stale
733- if query. enabled && query_data. state. borrow( ) . is_stale( & query) {
730+ if query. enabled && query_data. state . borrow ( ) . is_stale ( query) {
734731 let query = query. clone ( ) ;
735732 spawn ( async move {
736733 QueriesStorage :: run_queries ( & [ ( & query, & query_data) ] ) . await ;
737734 } ) ;
738735 }
736+ } ;
739737
740- query
741- } ) ) ;
738+ let mut curr_query = use_hook ( || {
739+ make_query ( & query) ;
740+ Signal :: new ( query. clone ( ) )
741+ } ) ;
742+
743+ if * curr_query. read ( ) != query {
744+ curr_query. set ( query) ;
745+ make_query ( & * curr_query. read ( ) ) ;
746+ }
742747
743748 // Update the query tasks when the scope is dropped
744749 use_drop ( {
745750 move || {
746- storage. update_tasks ( query . peek ( ) . clone ( ) ) ;
751+ storage. update_tasks ( curr_query . peek ( ) . clone ( ) ) ;
747752 }
748753 } ) ;
749754
750- UseQuery { query }
755+ UseQuery { query : curr_query }
751756}
0 commit comments