Convert use_eval to use send/recv system (#1080)
* progress: reworked don't run this, it'll kill your web browser * feat: use_eval but with comms * revision: async recv & recv_sync * revision: use_eval * revision: standard eval interface * revision: use serde_json::Value instead of JsValue * revision: docs * revision: error message * create: desktop eval (wip) * fix: desktop eval * revision: wrap use_eval in Rc<RefCell<_>> * fix: fmt, clippy * fix: desktop tests * revision: change to channel system - fixes clippy errors - fixes playwright tests * fix: tests * fix: eval example * fix: fmt * fix: tests, desktop stuff * fix: tests * feat: drop handler * fix: tests * fix: rustfmt * revision: web promise/callback system * fix: recv error * revision: IntoFuture, functionation * fix: ci * revision: playwright web * remove: unescessary code * remove dioxus-html from public examples * prototype-patch * fix web eval * fix: rustfmt * fix: CI * make use_eval more efficient * implement eval for liveview as well * fix playwright tests * fix clippy * more clippy fixes * fix clippy * fix stack overflow * fix desktop mock * fix clippy --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
This commit is contained in:
1 parent
b36a7a3993
commit
6210c6fefe
31 files changed
+1025
-410
No files matched your search
+28
-23
@@ -5,29 +5,34 @@ fn main() {
|
||||
}
|
||||
|
||||
fn app(cx: Scope) -> Element {
|
||||
let eval = dioxus_desktop::use_eval(cx);
|
||||
let script = use_state(cx, String::new);
|
||||
let output = use_state(cx, String::new);
|
||||
let eval_provider = use_eval(cx);
|
||||
|
||||
cx.render(rsx! {
|
||||
div {
|
||||
p { "Output: {output}" }
|
||||
input {
|
||||
placeholder: "Enter an expression",
|
||||
value: "{script}",
|
||||
oninput: move |e| script.set(e.value.clone()),
|
||||
}
|
||||
button {
|
||||
onclick: move |_| {
|
||||
to_owned![script, eval, output];
|
||||
cx.spawn(async move {
|
||||
if let Ok(res) = eval(script.to_string()).await {
|
||||
output.set(res.to_string());
|
||||
}
|
||||
});
|
||||
},
|
||||
"Execute"
|
||||
}
|
||||
let future = use_future(cx, (), |_| {
|
||||
to_owned![eval_provider];
|
||||
async move {
|
||||
let eval = eval_provider(
|
||||
r#"
|
||||
dioxus.send("Hi from JS!");
|
||||
let msg = await dioxus.recv();
|
||||
console.log(msg);
|
||||
return "hello world";
|
||||
"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
eval.send("Hi from Rust!".into()).unwrap();
|
||||
let res = eval.recv().await.unwrap();
|
||||
println!("{:?}", eval.await);
|
||||
res
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
match future.value() {
|
||||
Some(v) => cx.render(rsx!(
|
||||
p { "{v}" }
|
||||
)),
|
||||
_ => cx.render(rsx!(
|
||||
p { "hello" }
|
||||
)),
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user