fix #1979: generated Owned impl for the props builder was using the wrong generics. (#2027)

This commit fixes the owned impl to use the original generics rather than the build generics.
This commit is contained in:
Jonathan Kelley 2024-03-08 14:49:56 -08:00 committed by GitHub
parent 7461a14cb4
commit dd109f20d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 4 deletions

View file

@ -1276,7 +1276,8 @@ Finally, call `.build()` to create the instance of `{name}`.
});
let (impl_generics, _, _) = generics.split_for_impl();
let (_, ty_generics, where_clause) = self.generics.split_for_impl();
let (original_impl_generics, ty_generics, where_clause) =
self.generics.split_for_impl();
let modified_ty_generics = modify_types_generics_hack(&ty_generics, |args| {
args.insert(
@ -1344,13 +1345,13 @@ Finally, call `.build()` to create the instance of `{name}`.
owner: Owner,
}
impl #impl_generics PartialEq for #name #ty_generics #where_clause {
impl #original_impl_generics PartialEq for #name #ty_generics #where_clause {
fn eq(&self, other: &Self) -> bool {
self.inner.eq(&other.inner)
}
}
impl #impl_generics #name #ty_generics #where_clause {
impl #original_impl_generics #name #ty_generics #where_clause {
/// Create a component from the props.
fn into_vcomponent<M: 'static>(
self,
@ -1362,7 +1363,7 @@ Finally, call `.build()` to create the instance of `{name}`.
}
}
impl #impl_generics dioxus_core::prelude::Properties for #name #ty_generics #where_clause {
impl #original_impl_generics dioxus_core::prelude::Properties for #name #ty_generics #where_clause {
type Builder = ();
fn builder() -> Self::Builder {
unreachable!()

View file

@ -0,0 +1,30 @@
//! Signals can degrade into a ReadOnlySignal variant automatically
//! This is done thanks to a conversion by the #[component] macro
use dioxus::prelude::*;
fn main() {
launch(app);
}
fn app() -> Element {
let mut count = use_signal(|| 0);
rsx! {
h1 { "High-Five counter: {count}" }
button { onclick: move |_| count += 1, "Up high!" }
button { onclick: move |_| count -= 1, "Down low!" }
Child {
count,
"hiiii"
}
}
}
#[component]
fn Child(count: ReadOnlySignal<i32>, children: Element) -> Element {
rsx! {
div { "Count: {count}" }
{children}
}
}