@@ -14,25 +14,25 @@ fn main() {
14
14
#[ derive( Clone , PartialEq ) ]
15
15
struct Label {
16
16
key : usize ,
17
- label : Tracked < String > ,
17
+ label : Signal < String > ,
18
18
}
19
19
20
20
impl Label {
21
- fn new ( cx : & ScopeState , num : usize , label : String ) -> Self {
21
+ fn new ( num : usize , label : String ) -> Self {
22
22
Label {
23
23
key : num,
24
- label : Tracked :: new ( cx , label) ,
24
+ label : use_signal ( || label) ,
25
25
}
26
26
}
27
27
28
- fn new_list ( cx : & ScopeState , num : usize , key_from : usize ) -> Vec < Self > {
28
+ fn new_list ( num : usize , key_from : usize ) -> Vec < Self > {
29
29
let mut labels = Vec :: with_capacity ( num) ;
30
- append ( cx , & mut labels, num, key_from) ;
30
+ append ( & mut labels, num, key_from) ;
31
31
labels
32
32
}
33
33
}
34
34
35
- fn append ( cx : & ScopeState , list : & mut Vec < Label > , num : usize , key_from : usize ) {
35
+ fn append ( list : & mut Vec < Label > , num : usize , key_from : usize ) {
36
36
list. reserve_exact ( num) ;
37
37
for x in 0 ..num {
38
38
let adjective = ADJECTIVES [ random ( ADJECTIVES . len ( ) ) ] ;
@@ -44,7 +44,7 @@ fn append(cx: &ScopeState,list: &mut Vec<Label>, num: usize, key_from: usize) {
44
44
label. push_str ( colour) ;
45
45
label. push ( ' ' ) ;
46
46
label. push_str ( noun) ;
47
- list. push ( Label :: new ( cx , x + key_from, label) ) ;
47
+ list. push ( Label :: new ( x + key_from, label) ) ;
48
48
}
49
49
}
50
50
@@ -55,23 +55,23 @@ struct LabelsContainer {
55
55
}
56
56
57
57
impl LabelsContainer {
58
- fn new ( cx : & ScopeState , num : usize , last_key : usize ) -> LabelsContainer {
59
- let labels = Label :: new_list ( cx , num, last_key + 1 ) ;
58
+ fn new ( num : usize , last_key : usize ) -> LabelsContainer {
59
+ let labels = Label :: new_list ( num, last_key + 1 ) ;
60
60
LabelsContainer {
61
61
labels,
62
62
last_key : last_key + num,
63
63
}
64
64
}
65
65
66
- fn append ( & mut self , cx : & ScopeState , num : usize ) {
66
+ fn append ( & mut self , num : usize ) {
67
67
self . labels . reserve ( num) ;
68
- append ( cx , & mut self . labels , num, self . last_key + 1 ) ;
68
+ append ( & mut self . labels , num, self . last_key + 1 ) ;
69
69
self . last_key += num;
70
70
}
71
71
72
- fn overwrite ( & mut self , cx : & ScopeState , num : usize ) {
72
+ fn overwrite ( & mut self , num : usize ) {
73
73
self . labels . clear ( ) ;
74
- append ( cx , & mut self . labels , num, self . last_key + 1 ) ;
74
+ append ( & mut self . labels , num, self . last_key + 1 ) ;
75
75
self . last_key += num;
76
76
}
77
77
@@ -88,11 +88,9 @@ impl LabelsContainer {
88
88
}
89
89
}
90
90
91
- fn app ( cx : Scope ) -> Element {
92
- let labels_container = use_ref ( & cx, || LabelsContainer :: new ( cx, 0 , 0 ) ) ;
93
- let selected: & Tracked < Option < usize > > = cx. use_hook ( ||{
94
- Tracked :: new ( & cx, None )
95
- } ) ;
91
+ fn app ( ) -> Element {
92
+ let labels_container = use_signal ( || LabelsContainer :: new ( 0 , 0 ) ) ;
93
+ let selected: & Signal < Option < usize > > = use_signal ( || use_signal ( || None ) ) ;
96
94
97
95
rsx ! {
98
96
div { class: "container" ,
@@ -102,13 +100,13 @@ fn app(cx: Scope) -> Element {
102
100
div { class: "col-md-6" ,
103
101
div { class: "row" ,
104
102
ActionButton { name: "Create 1,000 rows" , id: "run" ,
105
- onclick: move |_| labels_container. write( ) . overwrite( cx , 1_000 ) ,
103
+ onclick: move |_| labels_container. write( ) . overwrite( 1_000 ) ,
106
104
}
107
105
ActionButton { name: "Create 10,000 rows" , id: "runlots" ,
108
- onclick: move |_| labels_container. write( ) . overwrite( cx , 10_000 ) ,
106
+ onclick: move |_| labels_container. write( ) . overwrite( 10_000 ) ,
109
107
}
110
108
ActionButton { name: "Append 1,000 rows" , id: "add" ,
111
- onclick: move |_| labels_container. write( ) . append( cx , 1_000 ) ,
109
+ onclick: move |_| labels_container. write( ) . append( 1_000 ) ,
112
110
}
113
111
ActionButton { name: "Update every 10th row" , id: "update" ,
114
112
onclick: move |_| {
@@ -119,7 +117,7 @@ fn app(cx: Scope) -> Element {
119
117
} ,
120
118
}
121
119
ActionButton { name: "Clear" , id: "clear" ,
122
- onclick: move |_| labels_container. write( ) . overwrite( cx , 0 ) ,
120
+ onclick: move |_| labels_container. write( ) . overwrite( 0 ) ,
123
121
}
124
122
ActionButton { name: "Swap rows" , id: "swaprows" ,
125
123
onclick: move |_| labels_container. write( ) . swap( 1 , 998 ) ,
@@ -162,15 +160,16 @@ impl PartialEq for RowProps {
162
160
}
163
161
}
164
162
165
- fn Row ( cx : Scope < RowProps > ) -> Element {
163
+ fn Row ( props : RowProps ) -> Element {
166
164
let RowProps {
167
165
label,
168
166
labels,
169
167
selected_row,
170
- } = & cx. props ;
171
- let label_text = use_selector ( & cx, & label. label , |label| label. clone ( ) ) ;
168
+ } = & props;
169
+
170
+ let label_text = use_selector ( & label. label , |label| label. clone ( ) ) ;
172
171
let key = label. key ;
173
- let is_in_danger = use_selector ( & cx , selected_row, move |selected_row : & Option < usize > | {
172
+ let is_in_danger = use_selector ( selected_row, move |selected_row : & Option < usize > | {
174
173
let result = match selected_row {
175
174
Some ( selected_row) => {
176
175
if * selected_row == key {
@@ -202,13 +201,8 @@ fn Row(cx: Scope<RowProps>) -> Element {
202
201
}
203
202
}
204
203
205
- #[ inline_props]
206
- fn ActionButton < ' a > (
207
- cx : Scope < ' a , ActionButtonProps > ,
208
- name : & ' static str ,
209
- id : & ' static str ,
210
- onclick : EventHandler < ' a > ,
211
- ) -> Element {
204
+ #[ component]
205
+ fn ActionButton ( name : & str , id : & str , onclick : EventHandler ) -> Element {
212
206
rsx ! {
213
207
div {
214
208
class: "col-sm-6 smallpad" ,
@@ -260,4 +254,3 @@ static NOUNS: &[&str] = &[
260
254
"table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" , "sandwich" , "burger" ,
261
255
"pizza" , "mouse" , "keyboard" ,
262
256
] ;
263
-
0 commit comments