Procházet zdrojové kódy

Merge branch 'breaking' of https://github.com/Demonthos/dioxus into breaking

Evan Almloff před 1 rokem
rodič
revize
8fe2515413

+ 6 - 6
packages/core-macro/src/component_body_deserializers/inline_props.rs

@@ -47,7 +47,7 @@ fn get_props_struct(component_body: &ComponentBody) -> ItemStruct {
     } = sig;
 
     // Skip first arg since that's the context
-    let struct_fields = inputs.iter().skip(1).map(move |f| {
+    let struct_fields = inputs.iter().map(move |f| {
         match f {
             FnArg::Receiver(_) => unreachable!(), // Unreachable because of ComponentBody parsing
             FnArg::Typed(pt) => {
@@ -74,9 +74,9 @@ fn get_props_struct(component_body: &ComponentBody) -> ItemStruct {
     };
 
     let struct_attrs = if first_lifetime.is_some() {
-        quote! { #[derive(Props)] }
+        quote! { #[derive(Props, Clone)] }
     } else {
-        quote! { #[derive(Props, PartialEq)] }
+        quote! { #[derive(Props, Clone, PartialEq)] }
     };
 
     let struct_generics = if first_lifetime.is_some() {
@@ -245,7 +245,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
     let struct_ident = Ident::new(&format!("{fn_ident}Props"), fn_ident.span());
 
     // Skip first arg since that's the context
-    let struct_field_names = inputs.iter().skip(1).filter_map(|f| match f {
+    let struct_field_names = inputs.iter().filter_map(|f| match f {
         FnArg::Receiver(_) => unreachable!(), // ComponentBody prohibits receiver parameters.
         FnArg::Typed(pt) => Some(&pt.pat),
     });
@@ -256,7 +256,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
         None
     };
 
-    let (scope_lifetime, fn_generics) = if let Some(lt) = first_lifetime {
+    let (_scope_lifetime, fn_generics) = if let Some(lt) = first_lifetime {
         (quote! { #lt, }, generics.clone())
     } else {
         let lifetime: LifetimeParam = parse_quote! { 'a };
@@ -296,7 +296,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
         #asyncness #vis fn #fn_ident #fn_generics (__props: #struct_ident #generics_no_bounds) #fn_output
         #where_clause
         {
-            let #struct_ident { #(#struct_field_names),* } = &__props;
+            let #struct_ident { #(#struct_field_names),* } = __props;
             #fn_block
         }
     }

+ 2 - 5
packages/core-macro/src/lib.rs

@@ -39,11 +39,8 @@ pub fn derive_typed_builder(input: TokenStream) -> TokenStream {
 
 /// The rsx! macro makes it easy for developers to write jsx-style markup in their components.
 #[proc_macro]
-pub fn rsx(s: TokenStream) -> TokenStream {
-    match syn::parse::<rsx::CallBody>(s) {
-        Err(err) => err.to_compile_error().into(),
-        Ok(body) => body.to_token_stream().into(),
-    }
+pub fn rsx(tokens: TokenStream) -> TokenStream {
+    render(tokens)
 }
 
 /// The render! macro makes it easy for developers to write jsx-style markup in their components.

+ 3 - 1
packages/dioxus/Cargo.toml

@@ -16,13 +16,15 @@ dioxus-html = { workspace = true, optional = true }
 dioxus-core-macro = { workspace = true, optional = true }
 dioxus-hooks = { workspace = true, optional = true }
 dioxus-rsx = { workspace = true, optional = true }
+dioxus-signals = { workspace = true, optional = true }
 manganis = { git = "https://github.com/DioxusLabs/collect-assets" }
 
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
 dioxus-hot-reload = { workspace = true, optional = true }
 
 [features]
-default = ["macro", "hooks", "html", "hot-reload"]
+default = ["macro", "html", "hot-reload", "signals"]
+signals = ["dioxus-signals"]
 macro = ["dioxus-core-macro", "dioxus-rsx"]
 html = ["dioxus-html"]
 hooks = ["dioxus-hooks"]

+ 6 - 0
packages/dioxus/src/lib.rs

@@ -7,6 +7,9 @@ pub use dioxus_core as core;
 #[cfg(feature = "hooks")]
 pub use dioxus_hooks as hooks;
 
+#[cfg(feature = "signals")]
+pub use dioxus_signals as signals;
+
 pub mod events {
     #[cfg(feature = "html")]
     pub use dioxus_html::prelude::*;
@@ -28,6 +31,9 @@ pub mod prelude {
     #[cfg(feature = "hooks")]
     pub use crate::hooks::*;
 
+    #[cfg(feature = "signals")]
+    pub use dioxus_signals::*;
+
     pub use dioxus_core::prelude::*;
 
     #[cfg(feature = "macro")]