Skip to content

Commit 66f62a3

Browse files
committed
Merge branch 'gbj-master'
2 parents d0bc4a7 + a6f22f9 commit 66f62a3

File tree

5 files changed

+45
-57
lines changed

5 files changed

+45
-57
lines changed

frameworks/keyed/leptos/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ wasm-bindgen = { version = "0.2", features = ["enable-interning"] }
1212
console_error_panic_hook = "0.1"
1313
getrandom = { version = "0.2.7", features = ["js"] }
1414
rand = { version = "0.8.5", features = ["small_rng"] }
15-
leptos = { version = "0.6.3", features = ["csr", "nightly", "template_macro"] }
15+
leptos = { version = "0.7", features = ["csr", "nightly", "delegation"] }
1616
web-sys = "0.3"
1717

1818
[profile.release]

frameworks/keyed/leptos/bundled-dist/js-framework-benchmark-leptos.js

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.

frameworks/keyed/leptos/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Benchmark for Leptos",
55
"license": "ISC",
66
"js-framework-benchmark": {
7-
"frameworkVersion": "0.6.3",
7+
"frameworkVersion": "0.7.0",
88
"frameworkHomeURL": "https://github.com/leptos-rs/leptos",
99
"issues": [
1010
1139

frameworks/keyed/leptos/src/lib.rs

Lines changed: 42 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
use std::sync::atomic::{AtomicUsize, Ordering};
2-
3-
use leptos::*;
1+
use leptos::prelude::*;
42
use rand::prelude::*;
5-
use wasm_bindgen::{prelude::*, JsCast};
6-
3+
use std::sync::atomic::{AtomicUsize, Ordering};
74
static ADJECTIVES: &[&str] = &[
85
"pretty",
96
"large",
@@ -33,19 +30,19 @@ static ADJECTIVES: &[&str] = &[
3330
];
3431

3532
static COLOURS: &[&str] = &[
36-
"red", "yellow", "blue", "green", "pink", "brown", "purple", "brown",
37-
"white", "black", "orange",
33+
"red", "yellow", "blue", "green", "pink", "brown", "purple", "brown", "white", "black",
34+
"orange",
3835
];
3936

4037
static NOUNS: &[&str] = &[
41-
"table", "chair", "house", "bbq", "desk", "car", "pony", "cookie",
42-
"sandwich", "burger", "pizza", "mouse", "keyboard",
38+
"table", "chair", "house", "bbq", "desk", "car", "pony", "cookie", "sandwich", "burger",
39+
"pizza", "mouse", "keyboard",
4340
];
4441

45-
#[derive(Copy, Debug, Clone, PartialEq, Eq, Hash)]
42+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
4643
struct RowData {
4744
id: usize,
48-
label: (ReadSignal<String>, WriteSignal<String>),
45+
label: ArcRwSignal<String>,
4946
}
5047

5148
static ID_COUNTER: AtomicUsize = AtomicUsize::new(1);
@@ -70,11 +67,10 @@ fn build_data(count: usize) -> Vec<RowData> {
7067

7168
data.push(RowData {
7269
id: ID_COUNTER.load(Ordering::Relaxed),
73-
label: create_signal(label),
70+
label: ArcRwSignal::new(label),
7471
});
7572

76-
ID_COUNTER
77-
.store(ID_COUNTER.load(Ordering::Relaxed) + 1, Ordering::Relaxed);
73+
ID_COUNTER.store(ID_COUNTER.load(Ordering::Relaxed) + 1, Ordering::Relaxed);
7874
}
7975

8076
data
@@ -89,36 +85,31 @@ fn Button(
8985
text: &'static str,
9086
) -> impl IntoView {
9187
view! {
92-
9388
<div class="col-sm-6 smallpad">
94-
<button
95-
id=id
96-
class="btn btn-primary btn-block"
97-
type="button"
98-
>
89+
<button id=id class="btn btn-primary btn-block" type="button">
9990
{text}
10091
</button>
10192
</div>
10293
}
10394
}
10495

10596
#[component]
106-
fn App() -> impl IntoView {
107-
let (data, set_data) = create_signal(Vec::<RowData>::new());
108-
let (selected, set_selected) = create_signal(None::<usize>);
97+
pub fn App() -> impl IntoView {
98+
let (data, set_data) = signal(Vec::<RowData>::new());
99+
let (selected, set_selected) = signal(None::<usize>);
109100

110101
let remove = move |id: usize| {
111102
set_data.update(move |data| data.retain(|row| row.id != id));
112103
};
113104

114105
let run = move |_| {
115-
set_data(build_data(1000));
116-
set_selected(None);
106+
set_data.set(build_data(1000));
107+
set_selected.set(None);
117108
};
118109

119110
let run_lots = move |_| {
120-
set_data(build_data(10000));
121-
set_selected(None);
111+
set_data.set(build_data(10000));
112+
set_selected.set(None);
122113
};
123114

124115
let add = move |_| {
@@ -128,14 +119,14 @@ fn App() -> impl IntoView {
128119
let update = move |_| {
129120
data.with(|data| {
130121
for row in data.iter().step_by(10) {
131-
row.label.1.update(|n| n.push_str(" !!!"));
122+
row.label.update(|n| n.push_str(" !!!"));
132123
}
133124
});
134125
};
135126

136127
let clear = move |_| {
137-
set_data(Vec::new());
138-
set_selected(None);
128+
set_data.set(Vec::new());
129+
set_selected.set(None);
139130
};
140131

141132
let swap_rows = move |_| {
@@ -146,63 +137,61 @@ fn App() -> impl IntoView {
146137
});
147138
};
148139

149-
let is_selected = create_selector(selected);
140+
let is_selected = Selector::new(move || selected.get());
150141

151142
view! {
152-
153143
<div class="container">
154144
<div class="jumbotron">
155145
<div class="row">
156-
<div class="col-md-6"><h1>"Leptos"</h1></div>
146+
<div class="col-md-6">
147+
<h1>"Leptos"</h1>
148+
</div>
157149
<div class="col-md-6">
158150
<div class="row">
159-
<Button id="run" text="Create 1,000 rows" on:click=run />
160-
<Button id="runlots" text="Create 10,000 rows" on:click=run_lots />
161-
<Button id="add" text="Append 1,000 rows" on:click=add />
162-
<Button id="update" text="Update every 10th row" on:click=update />
163-
<Button id="clear" text="Clear" on:click=clear />
164-
<Button id="swaprows" text="Swap Rows" on:click=swap_rows />
151+
<Button id="run" text="Create 1,000 rows" on:click=run/>
152+
<Button id="runlots" text="Create 10,000 rows" on:click=run_lots/>
153+
<Button id="add" text="Append 1,000 rows" on:click=add/>
154+
<Button id="update" text="Update every 10th row" on:click=update/>
155+
<Button id="clear" text="Clear" on:click=clear/>
156+
<Button id="swaprows" text="Swap Rows" on:click=swap_rows/>
165157
</div>
166158
</div>
167159
</div>
168160
</div>
169161
<table class="table table-hover table-striped test-data">
170162
<tbody>
171163
<For
172-
each={data}
173-
key={|row| row.id}
164+
each=move || data.get()
165+
key=|row| row.id
174166
children=move |row: RowData| {
175167
let row_id = row.id;
176-
let (label, _) = row.label;
177-
on_cleanup({
178-
let is_selected = is_selected.clone();
179-
move || {
180-
label.dispose();
181-
is_selected.remove(&Some(row_id));
182-
}
183-
});
168+
let label = row.label;
184169
let is_selected = is_selected.clone();
185170
template! {
186171
<tr class:danger={move || is_selected.selected(Some(row_id))}>
187172
<td class="col-md-1">{row_id.to_string()}</td>
188-
<td class="col-md-4"><a on:click=move |_| set_selected(Some(row_id))>{move || label.get()}</a></td>
173+
<td class="col-md-4"><a on:click=move |_| set_selected(Some(row_id))>{label}</a></td>
189174
<td class="col-md-1"><a on:click=move |_| remove(row_id)><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></a></td>
190175
<td class="col-md-6"/>
191176
</tr>
192177
}
193178
}
194179
/>
180+
195181
</tbody>
196182
</table>
197-
<span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true" />
183+
<span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true"/>
198184
</div>
199185
}
200186
}
201187

202-
#[wasm_bindgen(start)]
188+
#[wasm_bindgen::prelude::wasm_bindgen(start)]
203189
pub fn start() {
190+
use wasm_bindgen::JsCast;
191+
204192
console_error_panic_hook::set_once();
205193

206194
let root = document().query_selector("#main").unwrap().unwrap();
207-
mount_to(root.unchecked_into(), || view! { <App/> });
195+
let handle = mount_to(root.unchecked_into(), App);
196+
handle.forget();
208197
}

0 commit comments

Comments
 (0)