Introduction to React
Sparking the REACTion of User Interface and Experience
Decomposing the HTML User Interface
Complete code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 <!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
< link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity = "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin = "anonymous" />
< link rel = "stylesheet" href = "style.css" />
< title > My Home Page - Frinze Lapuz</ title >
</ head >
< body >
< nav class = "navbar sticky-top navbar-dark bg-dark" >
< div class = "container nav" >
< a class = "navbar-brand" href = "#" > Royal Homepage</ a >
</ div >
</ nav >
< div class = "container" >
< div class = "row" >
< div class = "col" > Here Some Dog For You. Cool Stuff right?</ div >
< div class = "col" >
<!-- <img class="img-fluid img-thumbnail" src="dog.jpg" alt="dog" /> -->
< div class = "carouselWrapper" >
< div id = "carouselDoggo" class = "carousel slide" data-ride = "carousel" >
< ol class = "carousel-indicators" >
< li data-target = "#carouselDoggo" data-slide-to = "0" class = "active" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "1" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "2" ></ li >
</ ol >
< div class = "carousel-inner" >
< div class = "carousel-item active" >
< img src = "dog.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > First Dog</ h5 >
< p > Cutie :)</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog2.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Second Dog</ h5 >
< p > Good Doggo!</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog3.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Third Dog</ h5 >
< p > Walkie Barkie Cutie!</ p >
</ div >
</ div >
</ div >
< a class = "carousel-control-prev" href = "#carouselDoggo" data-slide = "prev" >
< span class = "carousel-control-prev-icon" ></ span >
< span class = "sr-only" > Previous</ span >
</ a >
< a class = "carousel-control-next" href = "#carouselDoggo" data-slide = "next" >
< span class = "carousel-control-next-icon" ></ span >
< span class = "sr-only" > Next</ span >
</ a >
</ div >
</ div >
</ div >
</ div >
</ div >
< script src = "https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity = "sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin = "anonymous" ></ script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity = "sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin = "anonymous" ></ script >
< script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity = "sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin = "anonymous" ></ script >
</ body >
</ html >
Relevant Code for Discussion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 < nav class = "navbar sticky-top navbar-dark bg-dark" > <!--(1)-->
< div class = "container nav" >
< a class = "navbar-brand" href = "#" > Royal Homepage</ a >
</ div >
</ nav >
< div class = "container" >
< div class = "row" >
< div class = "col" > Here Some Dog For You. Cool Stuff right?</ div > <!--(2)-->
< div class = "col" >
< div class = "carouselWrapper" > <!--(3)-->
< div id = "carouselDoggo" class = "carousel slide" data-ride = "carousel" >
< ol class = "carousel-indicators" >
< li data-target = "#carouselDoggo" data-slide-to = "0" class = "active" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "1" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "2" ></ li >
</ ol >
< div class = "carousel-inner" >
< div class = "carousel-item active" >
< img src = "dog.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > First Dog</ h5 >
< p > Cutie :)</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog2.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Second Dog</ h5 >
< p > Good Doggo!</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog3.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Third Dog</ h5 >
< p > Walkie Barkie Cutie!</ p >
</ div >
</ div >
</ div >
< a class = "carousel-control-prev" href = "#carouselDoggo" data-slide = "prev" >
< span class = "carousel-control-prev-icon" ></ span >
< span class = "sr-only" > Previous</ span >
</ a >
< a class = "carousel-control-next" href = "#carouselDoggo" data-slide = "next" >
< span class = "carousel-control-next-icon" ></ span >
< span class = "sr-only" > Next</ span >
</ a >
</ div >
</ div >
</ div >
</ div >
</ div >
Navigation Bar
Some Text
Carousel
HTML Stored in Variables
const Nav =
`<nav class="navbar sticky-top navbar-dark bg-dark">
<div class="container nav">
<a class="navbar-brand" href="#">Royal Homepage</a>
</div>
</nav>
`
HTML Stored in Functions
const Nav = ( title ) =>
`
<nav class="navbar sticky-top navbar-dark bg-dark">
<div class="container nav">
<a class="navbar-brand" href="#"> ${ title } </a>
</div>
</nav>
`
Carousel Decomposition
The highlighted ones are the key-distinct data driven elements.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 < div class = "carouselWrapper" >
< div id = "carouselDoggo" class = "carousel slide" data-ride = "carousel" >
< ol class = "carousel-indicators" > <!--(1)-->
< li data-target = "#carouselDoggo" data-slide-to = "0" class = "active" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "1" ></ li >
< li data-target = "#carouselDoggo" data-slide-to = "2" ></ li >
</ ol >
< div class = "carousel-inner" >
< div class = "carousel-item active" > <!--(2)-->
< img src = "dog.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > First Dog</ h5 >
< p > Cutie :)</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog2.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Second Dog</ h5 >
< p > Good Doggo!</ p >
</ div >
</ div >
< div class = "carousel-item" >
< img src = "dog3.jpg" class = "d-block w-100" alt = "..." />
< div class = "carousel-caption d-none d-md-block" >
< h5 > Third Dog</ h5 >
< p > Walkie Barkie Cutie!</ p >
</ div >
</ div >
</ div >
< a class = "carousel-control-prev" href = "#carouselDoggo" data-slide = "prev" >
< span class = "carousel-control-prev-icon" ></ span >
< span class = "sr-only" > Previous</ span >
</ a >
< a class = "carousel-control-next" href = "#carouselDoggo" data-slide = "next" >
< span class = "carousel-control-next-icon" ></ span >
< span class = "sr-only" > Next</ span >
</ a >
</ div >
</ div >
Carousel Indicators
Carousel Items
Now, what if we have a variable called dogsData
an array of objects (may come from fetch
).
dogsData = [
...
{
imgSrc : "dog.jpg" ,
title : "First Dog" ,
caption : "Cutie :)"
}
...
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 const Carousel = ( dogsData ) =>
`
<div class="carouselWrapper"> <!--(1)-->
<div id="carouselDoggo" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
${ dogsData . map (( dog , index ) => `<li data-target="#carouselDoggo" data-slide-to=" ${ index } " class=" ${ index === 0 ? 'active' : '' } "></li>` ). join ( '' ) }
</ol>
<div class="carousel-inner">
${ dogsData . map (( dog , index ) => `
<div class="carousel-item ${ index === 0 ? 'active' : '' } ">
<img src=" ${ dog . imgSrc } " class="d-block w-100" alt="..." />
<div class="carousel-caption d-none d-md-block">
<h5> ${ dog . title } </h5>
<p> ${ dog . caption } </p>
</div>
</div>
` ). join ( '' ) }
</div>
<a class="carousel-control-prev" href="#carouselDoggo" data-slide="prev">
<span class="carousel-control-prev-icon"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselDoggo" data-slide="next">
<span class="carousel-control-next-icon"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
`
Assemble the Components
{ Nav ( "Royal Homepage" )}
< div class = "container" >
< div class = "row" >
< div class = "col-md-12" >
{ Carousel ( dogsData )}
< /div>
< /div>
or with JSX
< Nav title = "Royal Homepage" ></ Nav >
< div class = "container" >
< div class = "row" >
< div class = "col-md-12" >
< Carousel dogsData = {dogsData} ></ Carousel >
</ div >
</ div >
Intro to React
VIDEO
Complete Modularised Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 const Nav = () => < nav class = "navbar sticky-top navbar-dark bg-dark" >
< div class = "container nav" >
< a class = "navbar-brand" href = "#" > Royal Homepage < /a>
< /div>
< /nav>
const Carousel = ( dogsData ) =>
< div class = "carouselWrapper" >
< div id = "carouselDoggo" class = "carousel slide" data - ride = "carousel" >
< ol class = "carousel-indicators" >
$ { dogsData . map (( dog , index ) => `<li data-target="#carouselDoggo" data-slide-to=" ${ index } " class=" ${ index === 0 ? 'active' : '' } "></li>` ). join ( '' )}
< /ol>
< div class = "carousel-inner" >
$ { dogsData . map (( dog , index ) => `
<div class="carousel-item ${ index === 0 ? 'active' : '' } ">
<img src=" ${ dog . imgSrc } " class="d-block w-100" alt="..." />
<div class="carousel-caption d-none d-md-block">
<h5> ${ dog . title } </h5>
<p> ${ dog . caption } </p>
</div>
</div>
` ). join ( '' )}
< /div>
< a class = "carousel-control-prev" href = "#carouselDoggo" data - slide = "prev" >
< span class = "carousel-control-prev-icon" >< /span>
< span class = "sr-only" > Previous < /span>
< /a>
< a class = "carousel-control-next" href = "#carouselDoggo" data - slide = "next" >
< span class = "carousel-control-next-icon" >< /span>
< span class = "sr-only" > Next < /span>
< /a>
< /div>
< /div>
const Homepage = () =>{
const dogsData = fetch (...) // Get data from API
return (
<>
< Nav title = "Royal Homepage" >< /Nav>
< div class = "container" >
< div class = "row" >
< div class = "col-md-12" >
< Carousel dogsData = { dogsData } >< /Carousel>
< /div>
< /div>
< />
)
}
Getting Started with React
Getting Started with the app
To get started with react, use the following commands
npx create-react-app my-app
where my-app is the name of the folder for where the react app is going to be.
cd my-app
Notice that it created a couple of folders. In a couple of sentences:
src/index.js
- injects the user interface in the public/index.html (the front part of the build)
public
- folder containing the static assets as well as the index.html
package.json
- dependencies and scripts for the app
type yarn start
to run the development version of React (it will run react-scripts
start within the node_modules … so running react-scripts
start will not exactly be the same). This will serve up React in a port
To be left as a live coding exercise. Live coding demonstration:
Demo
Passing Array props
show “rafce”
useState when adding new item