wip: fix issues with lifetimes

this commit fixes some lifetime issues regarding having to "move" data into the IntoVNode closure.
This commit is contained in:
Jonathan Kelley committed 2021-07-07 13:51:55 -04:00
1 parent 22e659c2bd
commit a38a81e129
39 files changed
+566 -255

No files matched your search

+1
View File
@@ -3,6 +3,7 @@
use dioxus::events::on::MouseEvent;
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::*;
fn main() {
+3 -2
View File
@@ -9,6 +9,7 @@
use dioxus::events::on::*;
use dioxus::prelude::*;
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
const STYLE: &str = include_str!("../../../examples/assets/calculator.css");
@@ -159,7 +160,7 @@ struct CalculatorKeyProps<'a> {
onclick: &'a dyn Fn(MouseEvent),
}
fn CalculatorKey<'a>(cx: Context<'a, CalculatorKeyProps>) -> VNode<'a> {
fn CalculatorKey<'a, 'r>(cx: Context<'a, CalculatorKeyProps<'r>>) -> VNode<'a> {
cx.render(rsx! {
button {
class: "calculator-key {cx.name}"
@@ -181,7 +182,7 @@ fn CalculatorDisplay<'a>(cx: Context<'a, CalculatorDisplayProps>) -> VNode<'a> {
// TODO: make it autoscaling with css
cx.render(rsx! {
div { class: "calculator-display"
div { class: "auto-scaling-text", "{display_value}" }
div { class: "auto-scaling-text", "{formatted}" }
}
})
}
+1
View File
@@ -1,6 +1,7 @@
//! Basic example that renders a simple VNode to the browser.
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::*;
fn main() {
+1
View File
@@ -14,6 +14,7 @@
use dioxus_core::prelude::*;
use dioxus_core as dioxus;
use dioxus_web::WebsysRenderer;
use dioxus_html_namespace as dioxus_elements;
fn main() {
wasm_logger::init(wasm_logger::Config::new(log::Level::Trace));
+3 -2
View File
@@ -1,13 +1,14 @@
use std::rc::Rc;
use dioxus::prelude::*;
use dioxus_core as dioxus;
use dioxus_web::{dioxus::prelude::*, WebsysRenderer};
use dioxus_html_namespace as dioxus_elements;
fn main() {
wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
console_error_panic_hook::set_once();
wasm_bindgen_futures::spawn_local(WebsysRenderer::start(CustomA))
wasm_bindgen_futures::spawn_local(dioxus_web::WebsysRenderer::start(CustomA))
}
fn CustomA(cx: Context<()>) -> VNode {
+3 -1
View File
@@ -1,4 +1,6 @@
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_html_namespace::*;
use dioxus_web::{dioxus::prelude::*, WebsysRenderer};
fn main() {
@@ -9,7 +11,7 @@ fn main() {
fn App(cx: Context<()>) -> VNode {
cx.render(rsx! {
main { class: "dark:bg-gray-800 bg-white relative h-screen"
div { class: "dark:bg-gray-800 bg-white relative h-screen"
NavBar {}
{(0..10).map(|f| rsx!(Landing { key: "{f}" }))}
}
+1
View File
@@ -1,5 +1,6 @@
use dioxus::{events::on::MouseEvent, prelude::*};
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
fn main() {
+1
View File
@@ -1,6 +1,7 @@
//! Basic example that renders a simple VNode to the browser.
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::*;
fn main() {
+9 -4
View File
@@ -12,6 +12,9 @@ use dioxus::events::on::MouseEvent;
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_web::WebsysRenderer;
use dioxus_html_namespace as dioxus_elements;
fn main() {
wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
@@ -21,7 +24,8 @@ fn main() {
}
// We use a special immutable hashmap to make hashmap operations efficient
type RowList = im_rc::HashMap<usize, Rc<str>, nohash_hasher::BuildNoHashHasher<usize>>;
type RowList = im_rc::HashMap<usize, Rc<str>, FxBuildHasher>;
// type RowList = im_rc::HashMap<usize, Rc<str>, nohash_hasher::BuildNoHashHasher<usize>>;
static App: FC<()> = |cx| {
let (items, set_items) = use_state_classic(&cx, || RowList::default());
@@ -90,15 +94,15 @@ static App: FC<()> = |cx| {
};
#[derive(Props)]
struct ActionButtonProps<F: Fn(Rc<dyn MouseEvent>)> {
struct ActionButtonProps<F: Fn(MouseEvent)> {
name: &'static str,
id: &'static str,
action: F,
}
fn ActionButton<F: Fn(Rc<dyn MouseEvent>)>(cx: Context<ActionButtonProps<F>>) -> VNode {
fn ActionButton<F: Fn(MouseEvent)>(cx: Context<ActionButtonProps<F>>) -> VNode {
cx.render(rsx! {
div { class: "col-sm-6 smallpad"
button {class:"btn btn-primary btn-block", type: "button", id: "{cx.id}", onclick: {&cx.action},
button {class:"btn btn-primary btn-block", r#type: "button", id: "{cx.id}", onclick: {&cx.action},
"{cx.name}"
}
}
@@ -128,6 +132,7 @@ fn Row<'a>(cx: Context<'a, RowProps>) -> VNode {
})
}
use fxhash::{FxBuildHasher, FxHasher32};
use rand::prelude::*;
fn create_new_row_label(rng: &mut SmallRng) -> Rc<str> {
let mut label = String::new();
+1
View File
@@ -1,5 +1,6 @@
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
fn main() {
+1
View File
@@ -1,4 +1,5 @@
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::prelude::*;
fn main() {
+2
View File
@@ -1,6 +1,8 @@
use dioxus_core as dioxus;
use dioxus_core::{events::on::MouseEvent, prelude::*};
use dioxus_web::WebsysRenderer;
use dioxus_html_namespace as dioxus_elements;
fn main() {
// Setup logging
+4 -2
View File
@@ -1,6 +1,8 @@
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_web::WebsysRenderer;
use dioxus_html_namespace as dioxus_elements;
fn main() {
// wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
@@ -24,7 +26,7 @@ static App: FC<()> = |cx| {
placeholder: "Username"
class: "shadow appearance-none rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
id: "username"
type: "text"
r#type: "text"
value: "{val}"
oninput: move |evet| set_val(evet.value())
}
@@ -56,7 +58,7 @@ static UserInput: FC<()> = |cx| {
input { class: "shadow appearance-none rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
placeholder: "Username"
id: "username"
type: "text"
r#type: "text"
oninput: move |evet| set_val(evet.value())
}
p { "Val is: {val}" }
+1
View File
@@ -1,5 +1,6 @@
use dioxus::prelude::*;
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
fn main() {
+2
View File
@@ -3,7 +3,9 @@
use std::rc::Rc;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::*;
fn main() {
// Setup logging
// wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
+2 -2
View File
@@ -1,9 +1,9 @@
//! Basic example that renders a simple VNode to the browser.
use std::{future::Future, pin::Pin, rc::Rc};
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::*;
fn main() {
// Setup logging and panic handling
wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
+2 -1
View File
@@ -1,5 +1,6 @@
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
use std::collections::BTreeMap;
@@ -72,7 +73,7 @@ static App: FC<()> = |cx| {
"{todo.contents}"
input {
class: "toggle"
type: "checkbox"
r#type: "checkbox"
"{todo.checked}"
}
}
+1
View File
@@ -1,5 +1,6 @@
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
fn main() {
+1
View File
@@ -1,5 +1,6 @@
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
fn main() {
+1
View File
@@ -18,6 +18,7 @@
use dioxus::events::on::*;
use dioxus::prelude::*;
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
const STYLE: &str = include_str!("../../../examples/assets/calculator.css");
+3 -1
View File
@@ -4,6 +4,8 @@ use std::rc::Rc;
use dioxus::{events::on::MouseEvent, prelude::*};
use dioxus_core as dioxus;
use dioxus_web::WebsysRenderer;
use dioxus_html_namespace as dioxus_elements;
fn main() {
wasm_logger::init(wasm_logger::Config::new(log::Level::Trace));
@@ -50,7 +52,7 @@ static Example: FC<ExampleProps> = |cx| {
};
#[derive(Props)]
struct ButtonProps<'src, F: Fn(Rc<dyn MouseEvent>)> {
struct ButtonProps<'src, F: Fn(MouseEvent)> {
name: &'src str,
handler: F,
}
+2 -1
View File
@@ -2,6 +2,7 @@ use std::{collections::HashMap, rc::Rc};
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
static APP_STYLE: &'static str = include_str!("./todomvc/style.css");
@@ -112,7 +113,7 @@ pub fn TodoEntry(cx: Context<TodoEntryProps>) -> VNode {
"{todo.id}"
input {
class: "toggle"
type: "checkbox"
r#type: "checkbox"
"{todo.checked}"
}
{is_editing.then(|| rsx!{
+1
View File
@@ -1,4 +1,5 @@
use dioxus_core as dioxus;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::{prelude::*, WebsysRenderer};
// mod filtertoggles;
+2 -1
View File
@@ -2,6 +2,7 @@ use std::{collections::HashMap, rc::Rc};
use dioxus_core as dioxus;
use dioxus_core::prelude::*;
use dioxus_html_namespace as dioxus_elements;
use dioxus_web::WebsysRenderer;
static APP_STYLE: &'static str = include_str!("./todomvc/style.css");
@@ -115,7 +116,7 @@ pub fn TodoEntry(cx: Context<TodoEntryProps>) -> VNode {
"{todo.id}"
input {
class: "toggle"
type: "checkbox"
r#type: "checkbox"
"{todo.checked}"
}
{is_editing.then(|| rsx!{