1- import { signal , batch } from "@preact/signals" ;
1+ import { signal , batch , useComputed } from "@preact/signals" ;
2+ import { For } from "@preact/signals/utils" ;
23import { render , h } from "preact" ;
34
45let idCounter = 1 ;
@@ -109,8 +110,8 @@ const run = () => {
109110 swapRows = ( ) => {
110111 const d = data . value . slice ( ) ;
111112 if ( d . length > 998 ) {
112- let tmp = d [ 1 ] ;
113- d [ 1 ] = d [ 998 ] ;
113+ let tmp = { ... d [ 1 ] } ;
114+ d [ 1 ] = { ... d [ 998 ] } ;
114115 d [ 998 ] = tmp ;
115116 data . value = d ;
116117 }
@@ -124,6 +125,24 @@ const run = () => {
124125 selected . value = id ;
125126 } ;
126127
128+ const Row = ( { id, label } ) => {
129+ const rowClass = useComputed ( ( ) => selected . value === id ? "danger" : "" ) ;
130+ return (
131+ < tr class = { rowClass } >
132+ < td class = "col-md-1" textContent = { id } />
133+ < td class = "col-md-4" >
134+ < a onClick = { ( ) => select ( id ) } textContent = { label } />
135+ </ td >
136+ < td class = "col-md-1" >
137+ < a onClick = { ( ) => remove ( id ) } >
138+ < span class = "glyphicon glyphicon-remove" aria-hidden = "true" />
139+ </ a >
140+ </ td >
141+ < td class = "col-md-6" />
142+ </ tr >
143+ )
144+ }
145+
127146const App = ( ) => {
128147 return (
129148 < div class = "container" >
@@ -146,20 +165,9 @@ const App = () => {
146165 </ div >
147166 < table class = "table table-hover table-striped test-data" >
148167 < tbody >
149- { data . value . map ( ( row ) => (
150- < tr key = { row . id } class = { selected . value === row . id ? "danger" : "" } >
151- < td class = "col-md-1" textContent = { row . id } />
152- < td class = "col-md-4" >
153- < a onClick = { ( ) => select ( row . id ) } textContent = { row . label } />
154- </ td >
155- < td class = "col-md-1" >
156- < a onClick = { ( ) => remove ( row . id ) } >
157- < span class = "glyphicon glyphicon-remove" aria-hidden = "true" />
158- </ a >
159- </ td >
160- < td class = "col-md-6" />
161- </ tr >
162- ) ) }
168+ < For each = { data } >
169+ { ( row ) => < Row key = { row . id } id = { row . id } label = { row . label } /> }
170+ </ For >
163171 </ tbody >
164172 </ table >
165173 < span class = "preloadicon glyphicon glyphicon-remove" aria-hidden = "true" />
0 commit comments