Skip to content

Commit 518a8c0

Browse files
Implement 'composing components'
1 parent 941451e commit 518a8c0

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/main/kotlin/App.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import react.dom.html.ReactHTML.p
1515
import react.dom.html.ReactHTML.img
1616

1717
val App = FC<Props> {
18+
var currentVideo: Video? by useState(null)
1819
h1 {
1920
+"Hello, React+Kotlin/JS!"
2021
}
@@ -24,13 +25,21 @@ val App = FC<Props> {
2425
}
2526
VideoList {
2627
videos = unwatchedVideos
28+
selectedVideo = currentVideo
29+
onSelectVideo = { video ->
30+
currentVideo = video
31+
}
2732
}
2833

2934
h3 {
3035
+"Videos watched"
3136
}
3237
VideoList {
3338
videos = watchedVideos
39+
selectedVideo = currentVideo
40+
onSelectVideo = { video ->
41+
currentVideo = video
42+
}
3443
}
3544
}
3645
div {

src/main/kotlin/VideoList.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ import react.dom.html.ReactHTML.p
55

66
external interface VideoListProps : Props {
77
var videos: List<Video>
8+
var selectedVideo: Video?
9+
var onSelectVideo: (Video) -> Unit
810
}
911

1012
val VideoList = FC<VideoListProps> { props ->
11-
var selectedVideo: Video? by useState(null)
1213
for (video in props.videos) {
1314
p {
1415
key = video.id.toString()
1516
onClick = {
16-
selectedVideo = video
17+
props.onSelectVideo(video)
1718
}
18-
if (video == selectedVideo) {
19+
if (video == props.selectedVideo) {
1920
+""
2021
}
2122
+"${video.speaker}: ${video.title}"

0 commit comments

Comments
 (0)