diff --git a/packages/yew-macro/src/html_tree/html_element.rs b/packages/yew-macro/src/html_tree/html_element.rs index 143823c00b8..c1ef4e72c6a 100644 --- a/packages/yew-macro/src/html_tree/html_element.rs +++ b/packages/yew-macro/src/html_tree/html_element.rs @@ -428,8 +428,9 @@ impl ToTokens for HtmlElement { #[allow(clippy::redundant_clone, unused_braces, clippy::let_and_return)] let mut #vtag = match () { _ if "input".eq_ignore_ascii_case(::std::convert::AsRef::<::std::primitive::str>::as_ref(&#vtag_name)) => { - ::yew::virtual_dom::VTag::__new_textarea( + ::yew::virtual_dom::VTag::__new_input( #value, + #checked, #node_ref, #key, #attributes, @@ -465,7 +466,8 @@ impl ToTokens for HtmlElement { // For literal tags this is already done at compile-time. // // check void element - if !::std::matches!( + if ::yew::virtual_dom::VTag::children(&#vtag).is_some() && + !::std::matches!( ::yew::virtual_dom::VTag::children(&#vtag), ::std::option::Option::Some(::yew::virtual_dom::VNode::VList(ref #void_children)) if ::std::vec::Vec::is_empty(#void_children) ) { diff --git a/packages/yew-macro/tests/html_macro/dyn-element-pass.rs b/packages/yew-macro/tests/html_macro/dyn-element-pass.rs index e26369903ec..27dd094c0f9 100644 --- a/packages/yew-macro/tests/html_macro/dyn-element-pass.rs +++ b/packages/yew-macro/tests/html_macro/dyn-element-pass.rs @@ -60,4 +60,10 @@ fn main() { } }/> }; + + let input_tag = "input"; + let input_dom = ::yew::html! { <@{input_tag} /> }; + assert!( + ::std::matches!(input_dom, ::yew::virtual_dom::VNode::VTag(ref vtag) if vtag.tag() == "input") + ); }