mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-10 14:44:12 +00:00
67 lines
1.7 KiB
Rust
67 lines
1.7 KiB
Rust
//! Example: Weather App
|
|
//! --------------------
|
|
//!
|
|
//!
|
|
//!
|
|
|
|
use dioxus::prelude::*;
|
|
|
|
fn main() {
|
|
dioxus::desktop::launch(App);
|
|
}
|
|
|
|
const ENDPOINT: &str = "https://api.openweathermap.org/data/2.5/weather";
|
|
|
|
static App: Component = |cx| {
|
|
//
|
|
let body = use_suspense(
|
|
cx,
|
|
|| async {
|
|
let content = reqwest::get(ENDPOINT)
|
|
.await
|
|
.unwrap()
|
|
.json::<serde_json::Value>()
|
|
.await
|
|
.unwrap();
|
|
},
|
|
|props| {
|
|
//
|
|
cx.render(rsx!(WeatherDisplay {}))
|
|
},
|
|
);
|
|
|
|
cx.render(rsx! {
|
|
div {
|
|
{body}
|
|
}
|
|
})
|
|
};
|
|
|
|
#[derive(PartialEq, Props)]
|
|
struct WeatherProps {}
|
|
|
|
static WeatherDisplay: Component<WeatherProps> = |cx| {
|
|
//
|
|
cx.render(rsx!(
|
|
div { class: "flex items-center justify-center flex-col"
|
|
div { class: "flex items-center justify-center"
|
|
div { class: "flex flex-col bg-white rounded p-4 w-full max-w-xs"
|
|
div{ class: "font-bold text-xl"
|
|
"Jon's awesome site!!"
|
|
}
|
|
div{ class: "text-sm text-gray-500"
|
|
"He worked so hard on it :)"
|
|
}
|
|
div { class: "flex flex-row items-center justify-center mt-6"
|
|
div { class: "font-medium text-6xl"
|
|
"1337"
|
|
}
|
|
}
|
|
div { class: "flex flex-row justify-between mt-6"
|
|
"Legit made my own React"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
))
|
|
};
|