# Yew html attributes Yew html attributes is a macro crate that allow you to easily add standard html attributes to your component and to then pass them to a child. ## Usage : To add the html attributes to your props just add the `#[has_html_attributes]` before your props and derive `HasHtmlAttributes`. To then pass them along use the `use_attributes!` macro with a reference to the child html element and the props refererence. ```rust use yew::prelude::*; use yew_attributes_macro::prelude::*; #[has_html_attributes] #[derive(Debug, Clone, PartialEq, Default, Properties, HasHtmlAttributes)] pub struct InputProps{} #[function_component(Input)] pub fn input(props:&InputProps) -> Html { let node_ref = use_node_ref(); use_attributes!(node_ref, props); html! { <> } } ``` ### The `element` parameters By default the macro only adds the attributes common to all html element. If you want element to recieve all it's associated attributes provide the `element` parameter in `has_html_attributes` ```rust, no_run use yew::prelude::*; use yew_attributes_macro::prelude::*; #[has_html_attributes(element=input)] #[derive(Debug, Clone, PartialEq, Default, Properties, HasHtmlAttributes)] pub struct InputProps{} #[function_component(Input)] pub fn input(props:&InputProps) -> Html { let node_ref = use_node_ref(); use_attributes!(node_ref, props); html! { <> } } ``` ### The `exclude` parameter You might want some to remove some attributes to avoid overwritting some of your component internal logic. To do so you have to add the `exclude` parameter to the `has_html_attributes` with a list of all the attributes you want to exclude ```rust use yew::prelude::*; use yew_attributes_macro::prelude::*; #[has_html_attributes(exclude="oninput,onclick")] #[derive(Debug, Clone, PartialEq, Default, Properties, HasHtmlAt Finished dev [unoptimized + debuginfo] target(s) in 1.76stributes)] pub struct InputProps{} #[function_component(Input)] pub fn input(props:&InputProps) -> Html { let node_ref = use_node_ref(); use_attributes!(node_ref, props); html! { <> } } ``` ### The `invisible` parameter By default the macro add the attributes common to visible html elements. If you want to only have the attributes common to all html element use the invisible parameter ```rust use yew::prelude::*; use yew_attributes_macro::prelude::*; #[has_html_attributes(invisible=false)] #[derive(Debug, Clone, PartialEq, Default, Properties, HasHtmlAttributes)] pub struct ScriptProps{} #[function_component(Script)] pub fn script(props:&ScriptProps) -> Html { let node_ref = use_node_ref(); use_attributes!(node_ref, props); html! { <>