use dioxus::prelude::*; use dioxus_ssr::TextRenderer; // todo @Jon, support components in the html! macro // let renderer = TextRenderer::new(|_| html! {}); fn main() { let renderer = TextRenderer::<()>::new(|_| html! {
"Hello world"
}); let output = renderer.render(); } /// An example component that demonstrates how to use the functional_component macro /// This macro makes writing functional components elegant, similar to how Rocket parses URIs. /// /// You don't actually *need* this macro to be productive, but it makes life easier, and components cleaner. /// This approach also integrates well with tools like Rust-Analyzer. /// /// Notice that Context is normally generic over props, but RA doesn't care when in proc-macro mode. /// Also notice that ctx.props still works like you would expect, so migrating to the macro is easy. #[fc] fn example(ctx: &Context, name: String) -> VNode { html! {
"Hello, {name}!"
} } /* TODO /// The macro can also be applied to statics in order to make components less verbose /// The FC type automatically adds the inference, and property fields are automatically added as function arguments #[fc] static Example: FC = |ctx, name: String| { html! {
"Hello, {name}!"
} }; */ // This trait is not exposed to users directly, though they could manually implement this for struct-style components trait Comp { type Props: Properties; fn render(&self, ctx: &mut Context) -> VNode; fn builder(&self) -> Self::Props; } trait Properties { fn new() -> Self; } impl Comp for FC { type Props = T; fn render(&self, ctx: &mut Context) -> VNode { let g = self(ctx); g } fn builder(&self) -> T { T::new() } } #[allow(unused, non_upper_case_globals)] static MyComp: FC<()> = |ctx| { html! {

"hello world"

} }; fn my_comp(ctx: &Context<()>) -> VNode { todo!() } fn test() { let mut ctx = Context { props: &() }; let f = MyComp.render(&mut ctx); let props = MyComp.builder(); }