123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- //! Example: Webview Renderer
- //! -------------------------
- //!
- //! This example shows how to use the dioxus_desktop crate to build a basic desktop application.
- //!
- //! Under the hood, the dioxus_desktop crate bridges a native Dioxus VirtualDom with a custom prebuit application running
- //! in the webview runtime. Custom handlers are provided for the webview instance to consume patches and emit user events
- //! into the native VDom instance.
- //!
- //! Currently, NodeRefs won't work properly, but all other event functionality will.
- #![allow(non_upper_case_globals, non_snake_case)]
- use dioxus::{events::on::MouseEvent, prelude::*};
- fn main() -> anyhow::Result<()> {
- env_logger::init();
- dioxus::desktop::launch(App, |c| c)
- }
- static App: FC<()> = |cx| {
- let state = use_state(cx, || String::from("hello"));
- let clear_text = state == "hello";
- dbg!("rednering parent");
- cx.render(rsx! {
- div {
- h1 {"{state}"}
- CalculatorKey { name: "key-clear", onclick: move |_| state.get_mut().push_str("hello"), "{clear_text}" }
- CalculatorKey { name: "key-sign", onclick: move |_| { state.get_mut().pop(); }, "±"}
- }
- })
- };
- #[derive(Props)]
- struct CalculatorKeyProps<'a> {
- name: &'static str,
- onclick: &'a dyn Fn(MouseEvent),
- }
- fn CalculatorKey<'a, 'r>(cx: Context<'a, CalculatorKeyProps<'r>>) -> DomTree<'a> {
- cx.render(rsx! {
- button {
- class: "calculator-key {cx.name}"
- onclick: {cx.onclick}
- {cx.children()}
- }
- })
- }
|