add examples for onmounted
This commit is contained in:
1 parent
e0d46d9820
commit
a551c0fcb8
5 files changed
+135
-3
No files matched your search
@@ -0,0 +1,44 @@
|
|||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
dioxus_desktop::launch(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn app(cx: Scope) -> Element {
|
||||||
|
let elements: &UseRef<Vec<Rc<MountedData>>> = use_ref(cx, || Vec::new());
|
||||||
|
let running = use_state(cx, || true);
|
||||||
|
|
||||||
|
use_future!(cx, |(elements, running)| async move {
|
||||||
|
let mut focused = 0;
|
||||||
|
if *running.current() {
|
||||||
|
loop {
|
||||||
|
tokio::time::sleep(std::time::Duration::from_millis(10)).await;
|
||||||
|
if let Some(element) = elements.read().get(focused) {
|
||||||
|
element.set_focus(true);
|
||||||
|
} else {
|
||||||
|
focused = 0;
|
||||||
|
}
|
||||||
|
focused += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cx.render(rsx!(
|
||||||
|
div {
|
||||||
|
h1 { "Input Roulette" }
|
||||||
|
for i in 0..100 {
|
||||||
|
input {
|
||||||
|
value: "{i}",
|
||||||
|
onmounted: move |cx| {
|
||||||
|
elements.write().push(cx.inner().clone());
|
||||||
|
},
|
||||||
|
oninput: move |_| {
|
||||||
|
running.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
use dioxus::{html::geometry::euclid::Rect, prelude::*};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
dioxus_desktop::launch_cfg(
|
||||||
|
app,
|
||||||
|
dioxus_desktop::Config::default().with_custom_head(
|
||||||
|
r#"
|
||||||
|
<style type="text/css">
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#main {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
"#
|
||||||
|
.to_owned(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn app(cx: Scope) -> Element {
|
||||||
|
let div_element: &UseRef<Option<Rc<MountedData>>> = use_ref(cx, || None);
|
||||||
|
|
||||||
|
let dimentions = use_ref(cx, || Rect::zero());
|
||||||
|
|
||||||
|
cx.render(rsx!(
|
||||||
|
div {
|
||||||
|
width: "50%",
|
||||||
|
height: "50%",
|
||||||
|
background_color: "red",
|
||||||
|
onmounted: move |cx| {
|
||||||
|
div_element.set(Some(cx.inner().clone()));
|
||||||
|
},
|
||||||
|
"This element is {dimentions.read():?}"
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
onclick: move |_| {
|
||||||
|
to_owned![div_element, dimentions];
|
||||||
|
async move {
|
||||||
|
if let Some(div) = div_element.read().as_ref() {
|
||||||
|
if let Ok(rect)=div.get_client_rect().await{
|
||||||
|
dimentions.set(rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Read dimentions"
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
dioxus_desktop::launch(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn app(cx: Scope) -> Element {
|
||||||
|
let header_element = use_ref(cx, || None);
|
||||||
|
|
||||||
|
cx.render(rsx!(
|
||||||
|
div {
|
||||||
|
h1 {
|
||||||
|
onmounted: move |cx| {
|
||||||
|
header_element.set(Some(cx.inner().clone()));
|
||||||
|
},
|
||||||
|
"Scroll to top example"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in 0..100 {
|
||||||
|
div { "Item {i}" }
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
onclick: move |_| {
|
||||||
|
if let Some(header) = header_element.read().as_ref() {
|
||||||
|
header.scroll_to(ScrollBehavior::Smooth);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Scroll to top"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
@@ -88,12 +88,10 @@ impl RenderedElementBacking for DesktopElement {
|
|||||||
self.id.0, focus
|
self.id.0, focus
|
||||||
);
|
);
|
||||||
|
|
||||||
println!("script: {}", script);
|
|
||||||
let fut = self
|
let fut = self
|
||||||
.query
|
.query
|
||||||
.new_query::<bool>(&script, &self.webview)
|
.new_query::<bool>(&script, &self.webview)
|
||||||
.resolve();
|
.resolve();
|
||||||
println!("fut");
|
|
||||||
|
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
match fut.await {
|
match fut.await {
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ pub fn launch_with_props<P: 'static>(root: Component<P>, props: P, cfg: Config)
|
|||||||
EventData::Ipc(msg) if msg.method() == "query" => {
|
EventData::Ipc(msg) if msg.method() == "query" => {
|
||||||
let params = msg.params();
|
let params = msg.params();
|
||||||
|
|
||||||
if let Ok(result) = dbg!(serde_json::from_value::<QueryResult>(params)) {
|
if let Ok(result) = serde_json::from_value::<QueryResult>(params) {
|
||||||
let view = webviews.get(&event.1).unwrap();
|
let view = webviews.get(&event.1).unwrap();
|
||||||
let query = view
|
let query = view
|
||||||
.dom
|
.dom
|
||||||
|
|||||||
Reference in new issue
Block a user