Full Stack Development Lab Manual
Full Stack Development Lab Manual
Department of CSE
(Emerging Technologies)
(DATA SCIENCE, CYBER SECURITY & IOT)
B.TECH(R-20 Regulation)
(IV YEAR – I SEM)
(2023-24)
LAB MANUAL
EMERGING TECHNOLOGIES
Prepared by
D KALPANA
M GAYATRI
V SUNEETHA
On
01.06.2023
EMERGING TECHNOLOGIES
Vision
Mission
The department of CSE (Emerging Technologies) is committed to:
To offer highest Professional and Academic Standards in terms of Personal growth and
satisfaction.
Make the society as the hub of emerging technologies and thereby capture
opportunities in new age technologies.
To create a benchmark in the areas of Research, Education and Public Outreach.
To provide students a platform where independent learning and scientific study are
encouraged with emphasis on latest engineering techniques.
QUALITY POLICY
To pursue continual improvement of teaching learning process of Undergraduate and
Post Graduate programs in Engineering & Management vigorously.
To provide state of art infrastructure and expertise to impart the quality education and
research environment to students for a complete learning experiences.
To offer quality relevant and cost effective programmes to produce engineers as per
requirements of the industry need.
0-/3/-1.5
COURSE OBJECTIVES:
4. Develop web based application using suitable client side and server side
code.
PROGRAMS:
Week-3. Write a program to build a Chat module using HTML CSS and
JavaScript?
Week-6. Write a program to create and Build a Password Strength Check using
Jquery.
Week-7. Write a program to create and Build a star rating system using Jquery.
Week-9. Create a blog using React JS Using the CMS users must be able to
design a web page using the drag and drop method. Users should be able to add
textual or media content into placeholders that are attached to locations on the
web page using drag and drop method.
Assume this project is for a huge online departmental store. Assume that they
have a myriad of grocery items at their godown. All items must be listed on the
website, along with their quantities and prices.Users must be able to sign up
and purchase groceries.
The system should present him with delivery slot options, and the user must be
able to choose his preferred slot. Users must then be taken to the payment page
where he makes the payment with his favourite method.
COURSE OUTCOMES:
4. Develop web based application using suitable client side and server side
code.
1. Lab Objectives:
This course will enable the students:
1. Systematic Introduction to Web Designing
2. Getting familiar with the front and back end tools
3. Creating applications using HTML,CSS,Javascript
4. Implementing various applications using JQuery
5. Creating Websites.
2. Lab Outcomes:
Students will be able to understand
1. Usage of various front and back end Tools
2. They can understand and create applications on their own
3. Demonstrate and Designing of Websites can be carried out.
4. Develop web based application using suitable client side and server side
code.
5. Implement web based application using effective database access.
3. Introduction about lab
Minimum System requirements:
• Processors: Intel Atom® processor or Intel® Core™ i3 processor.
• Disk space: 1 GB.
• Operating systems: Windows* 7 or later, macOS, and Linux.
• Python* versions: 2.7.X, 3.6.X.,3.8.X
About lab:
A full-stack developer helps build and maintain both the front-end and the back-end of a
website. Learn about full-stack developer skills, salary, and how you can become one.
A full-stack developer is a developer or engineer who can build both the front end and
the back end of a website. The front end (the parts of a website a user sees and interacts
with) and the back end (the behind-the-scenes data storage and processing) require
different skill sets. Since full-stack developers are involved with all aspects of the
development process, they must have expertise in both.
Full-stack developers design and create websites and applications for various
platforms.
A full-stack developer’s job description might include the following:
• Develop and maintain web services and interfaces
• Contribute to front-end and back-end development processes
• Build new product features or APIs
• Perform tests, troubleshoot software, and fix bugs
• Collaborate with other departments on projects and sprints
4. Guidelines to students
Students are required to carry their lab observation book and record book with completed
experiments while entering the lab.
➢ Students must use the equipment with care. Any damage is caused student is punishable
➢ Students are not allowed to use their cell phones/pen drives/ CDs in labs.
INDEX
Write a program to build a Chat module using HTML CSS and JavaScript? 3
3
<!DOCTYPE html>
<html>
<body>
</body>
</html>
Week-2. Write a program to create a website using HTML CSS and JavaScript?
1. Create a form and validate the contents of the form using Javascript.
AIM: To create a form and validate the contents of the form using Javascript.
Program:
Week-3. Write a program to build a Chat module using HTML CSS and JavaScript?
<div class="chat-box">
<header>
<h1>André F. Martins</h1>
<span style="flex:1"></span>
<span class="close-button">X</span>
</header>
<section id="message-list">
</section>
<footer>
<input id="message-input" type="text" placeholder="Type a message...">
</footer>
</div>
box-sizing: border-box
::selection
background: #fd0
color: #222
br
font-size: 0
body
font-family: "Karla", sans-serif
margin: 0
display: flex
align-items: center
justify-content: center
width: 100vw
height: 100vh
font-size: 16px
background-color: #ddd
.chat-box
width: 300px
height: 400px
background-color: #eee
border-radius: 16px 16px 0 0
overflow: hidden
border: 2px #45f solid
header
background-color: #45f
color: #fff
display: flex
padding: 0 16px
>*
line-height: 40px
h1
margin: 0
font-size: 1.1em
.close-button
cursor: pointer
user-select: none
section
overflow-y: scroll
overflow-x: hidden
height: calc(100% - 40px - 40px)
padding: 12px
div
margin: 12px 0
span
display: inline-block
padding: 6px 8px
margin: 1px 0
max-width: 90%
word-wrap: break-word
div.me
text-align: left
span
background-color: #68c
border-radius: 4px 16px 16px 4px
span:first-of-type
border-top-left-radius: 16px
span:last-of-type
border-bottom-left-radius: 16px
div.not-me
text-align: right
span
background-color: #bcf
border-radius: 16px 4px 4px 16px
span:first-of-type
border-top-right-radius: 16px
span:last-of-type
border-bottom-right-radius: 16px
footer
input
font-family: "Karla", sans-serif
outline: 0
padding: 0 12px
height: 40px
width: 100%
font-size: 1em
var className;
if(itsMe)
{
className = "me";
scrollToBottom = true;
}
else
{
className = "not-me";
}
messageBlock.appendChild(newMessage);
messageList.appendChild(messageBlock);
}
if(scrollToBottom)
messageList.scrollTop = messageList.scrollHeight;
}
sendMessage("Hello!", true);
sendMessage("Hey!", false);
sendMessage("How are you doing?", false);
sendMessage("I'm doing well.", true);
sendMessage("What about you?", true);
sendMessage("Good", false);
function sendRandomMessages()
{
// http://www.conversationstarters.com/generator.php
var messageList = [
"What is your biggest concern about the future?",
"What is your biggest fear?",
"At what age would you consider someone to be old?",
"What is your favorite home cooked dish?",
"What is the biggest priority in your life right now?",
"Where did you go on your last vacation?",
"What was the biggest life change you've gone through?",
"Do you have any siblings?",
"What's your family like?",
"If you knew that you only had a year left to live, what would you do?",
"What do you usually eat in the morning?",
"What's in your fridge?",
"Do you recycle?",
"What are some things that you should not not say during a job interview?",
"If you could go back in time and change one thing, what would that be?",
"What do you wear to sleep?",
"What is the last thing you do before you go to sleep?",
"If you could only eat one thing for the rest of your life, what would it be?",
"Would you rather be homeless for a year or be in jail for a year?",
"What do you do for fun?"
];
var choosenMessage = messageList[Math.floor(Math.random() * messageList.length)];
sendMessage(choosenMessage, false);
sendRandomMessages();
.container {
border: 2px solid #dedede;
background-color: #f1f1f1;
border-radius: 5px;
padding: 10px;
margin: 10px 0;
}
.darker {
border-color: #ccc;
background-color: #ddd;
}
.container::after {
content: "";
clear: both;
display: table;
}
.container img {
float: left;
max-width: 60px;
width: 100%;
margin-right: 20px;
border-radius: 50%;
}
.container img.right {
float: right;
margin-left: 20px;
margin-right:0;
}
.time-right {
float: right;
color: #aaa;
}
.time-left {
float: left;
color: #999;
}
</style>
</head>
<body>
<h2>Chat Messages</h2>
<div class="container">
<img src="/w3images/bandmember.jpg" alt="Avatar" style="width:100%;">
<p>Hello. How are you today?</p>
<span class="time-right">11:00</span>
</div>
<div class="container">
<img src="/w3images/bandmember.jpg" alt="Avatar" style="width:100%;">
<p>Sweet! So, what do you wanna do today?</p>
<span class="time-right">11:02</span>
</div>
</body>
</html>
{this.props.label}
</div>
)
}
}
class Display extends Component {
render() {
const string = this.props.data.join('')
return <div className="Display"> {string} </div>
}
}
handleClick = e => {
const value = e.target.getAttribute('data-value')
switch (value) {
case 'clear':
this.setState({
operations: [],
})
break
case 'equal':
this.calculateOperations()
break
default:
const newOperations = update(this.state.operations, {
$push: [value],
})
this.setState({
operations: newOperations,
})
break
}
calculateOperations = () => {
let result = this.state.operations.join('')
if (result) {
result = math.eval(result)
result = math.format(result, { precision: 14 })
result = String(result)
this.setState({
operations: [result],
})
}
}
constscheme=(proto)=>
window.location.protocol==="https:"?`${proto}s`: proto;
constwsURI=`${scheme("ws")}://${GRAPHQL_ENDPOINT}/v1/graphql`;
consthttpURL=`${scheme("https")}://${GRAPHQL_ENDPOINT}/v1/graphql`;
constsplitter=({ query })=>{
const{ kind, operation }=getMainDefinition(query)||{};
constisSubscription=
kind ==="OperationDefinition"&& operation ==="subscription";
returnisSubscription;
};
Week-6. Write a program to create and Build a Password Strength Check using Jquery.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fon
t-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/
4.0.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.
min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstr
ap.min.js"></script>
<script src="CheckPasswordStrength.js"></script>
<link href="CheckPasswordStrength.css" rel="stylesheet" />
$(document).ready(function () {
$('#txtPassword').keyup(function () {
$('#strengthMessage').html(checkStrength($('#txtPassword').val(
)))
})
function checkStrength(password) {
var strength = 0
if (password.length < 6) {
$('#strengthMessage').removeClass()
$('#strengthMessage').addClass('Short')
return 'Too short'
}
if (password.length > 7) strength += 1
// If password contains both lower and uppercase characters, in
crease strength value.
if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))
strength += 1
// If it has numbers and characters, increase strength value.
if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))
strength += 1
// If it has one special character, increase strength value.
if (password.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) strength += 1
else if (strength == 2) {
$('#strengthMessage').removeClass()
$('#strengthMessage').addClass('Good')
return 'Good'
} else {
$('#strengthMessage').removeClass()
$('#strengthMessage').addClass('Strong')
return 'Strong'
} }
});
.Short {
width: 100%;
background-color: #dc3545;
margin-top: 5px;
height: 3px;
color: #dc3545;
font-weight: 500;
font-size: 12px;
}
.Weak {
width: 100%;
background-color: #ffc107;
margin-top: 5px;
height: 3px;
color: #ffc107;
font-weight: 500;
font-size: 12px;
}
.Good {
width: 100%;
background-color: #28a745;
margin-top: 5px;
height: 3px;
color: #28a745;
font-weight: 500;
font-size: 12px;
}
.Strong {
width: 100%;
background-color: #d39e00;
margin-top: 5px;
height: 3px;
color: #d39e00;
font-weight: 500;
font-size: 12px;
}
<body>
<form id="form1" runat="server">
<div class="container py-3">
<h4 class="text-center text-
uppercase">How to check password strength in jquery</h4>
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-6 mx-auto">
<div class="card border-secondary">
<div class="card-header">
<h3 class="mb-0 my-2">Sign Up</h3>
</div>
<div class="card-body">
<div class="form-group">
<label>Name</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-user"></i></span>
</div>
<asp:TextBox ID="txtFirstName" runat="server" CssClass="form-
control"></asp:TextBox>
</div>
</div>
<div class="form-group">
<label>Phone Number</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-phone"></i></span>
</div>
<asp:TextBox ID="txtPhoneNumber" runat="server" CssClass="form-
control"> </asp:TextBox>
</div>
</div>
<div class="form-group">
<label>Email</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-envelope">
</i></span>
</div>
<asp:TextBox ID="txtEmail" runat="server" CssClass="form-control">
</asp:TextBox>
</div>
</div>
<div class="form-group">
<label>Password</label>
<div class="input-group">
<div class="input-group-
prepend">
<span class="input-group-text"><i class="fa fa-lock">
</i></span>
</div>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"
CssClass="form-control"></asp:TextBox>
</div>
<div id="strengthMessage"></div>
</div>
<div class="form-group">
<label>Confirm Password</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-lock">
</i></span>
</div>
asp:TextBox ID="txtConfirmPassword" runat="server"
TextMode="Password" CssClass="form-control"></asp:TextBox>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success float-right rounded-0">
Register</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
Week-7. Write a program to create and Build a star rating system using Jquery.
$(document).ready(function() {
$("#st1").click(function() {
$(".fa-star").css("color", "black");
$("#st1").css("color", "yellow");
});
<!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://cdnjs.cloudflare.com/ajax/libs/twitter-
bootstrap/4.4.1/css/bootstrap.min.css">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"> </scr
ipt>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/twitter-
bootstrap/4.4.1/js/bootstrap.min.js"> </script>
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/4.7.0/css/font-awesome.min.css">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></
script>
<title> jQuery simple star rating example </title>
<style>
body {
background-color: aquamarine;
margin : 0px;
}
.fa-star {
font-size : 50px;
align-content: center;
}
.container {
height: 100px;
width: 600px;
margin: auto;
}
</style>
</head>
<body>
<div class = "container">
<h2 style="margin-top: 50px;">jQuery simple star rating example</h2>
<div class = "con">
<h3 style = "margin-top : 80px; color: green;">Rate our product :-</h3>
<i class = "fa fa-star" aria-hidden = "true" id = "st1"></i>
<i class = "fa fa-star" aria-hidden = "true" id = "st2"></i>
<i class = "fa fa-star" aria-hidden = "true" id = "st3"></i>
<i class = "fa fa-star" aria-hidden = "true" id = "st4"></i>
<i class = "fa fa-star" aria-hidden = "true" id = "st5"></i>
</div>
</div>
<script>
$(document).ready(function() {
$("#st1").click(function() {
$(".fa-star").css("color", "black");
$("#st1").css("color", "yellow");
});
$("#st2").click(function() {
$(".fa-star").css("color", "black");
$("#st1, #st2").css("color", "yellow");
});
$("#st3").click(function() {
$(".fa-star").css("color", "black")
$("#st1, #st2, #st3").css("color", "yellow");
});
$("#st4").click(function() {
$(".fa-star").css("color", "black");
$("#st1, #st2, #st3, #st4").css("color", "yellow");
});
$("#st5").click(function() {
$(".fa-star").css("color", "black");
$("#st1, #st2, #st3, #st4, #st5").css("color", "yellow");
});
});
</script>
</body>
</html>
Now we are creating a login form which is a very important in any application or website as you
know if open any website or application you will get a message to login if you click that you will
be redirected to login page in this week we will be creating login page
File Structure:-
----------------------------------------------App.js--------------------------------------
import './App.css';
function App() {
// React States
const database = [
username: "user1",
password: "pass1"
},
username: "user2",
password: "pass2"
];
const errors = {
};
event.preventDefault();
if (userData) {
// Invalid password
} else {
setIsSubmitted(true);
} else {
};
<div className="error">{errorMessages.message}</div>
);
constrenderForm = (
<div className="form">
<form onSubmit={handleSubmit}>
<div className="input-container">
<label>Username </label>
{renderErrorMessage("uname")}
</div>
<div className="input-container">
<label>Password </label>
{renderErrorMessage("pass")}
</div>
<div className="button-container">
</div>
</form>
</div>
);
return (
<div className="app">
<div className="login-form">
</div>
</div>
);
App.css
.app {
font-family: sans-serif;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 20px;
height: 100vh;
background-color: #f8f9fd;
input[type="text"],
input[type="password"] {
height: 25px;
input[type="submit"] {
margin-top: 10px;
cursor: pointer;
font-size: 15px;
background: #01d28e;
color: #fff;
input[type="submit"]:hover {
background: #6cf0c2;
.button-container {
display: flex;
justify-content: center;
.login-form {
background-color: white;
padding: 2rem;
.list-container {
display: flex;
.error {
color: red;
font-size: 12px;
.title {
font-size: 25px;
margin-bottom: 20px;
.input-container {
display: flex;
flex-direction: column;
gap: 8px;
margin: 10px;
1.App.js
import logo from './logo.svg';
import './App.css';
import Posts from "./components/Posts";
function App() {
return (
<div className="main-container">
<h1 className="main-heading">
Blog App using React Js
</h1>
<Posts />
Full Stack Development Lab Page 29
B.Tech – CSE (Emerging Technologies)
</div>
);
}
2.Posts.js
import React from "react";
import "./style.css";
title: "Algorithm",
body: `The word Algorithm means “a process
or set of rules to be followed in calculations
or other problem-solving operations”. Therefore
Algorithm refers to a set of rules/instructions
that step-by-step define how a work is to be
executed upon in order to get the expected
results. `,
author: "Monu Kr",
imgUrl:
"https://media.geeksforgeeks.org/img-practice/banner/google-test-series-thumbnail.png",
},
{
title: "Computer Network",
body: `An interconnection of multiple devices,
also known as hosts, that are connected using
multiple paths for the purpose of sending/
receiving data media. Computer networks can
also include multiple devices/mediums which
help in the communication between two different
devices; these are known as Network devices
and include things such as routers, switches,
hubs, and bridges. `,
author: "Sonu Kr",
imgUrl:
"https://media.geeksforgeeks.org/img-practice/banner/cp-maths-java-thumbnail.png",
},
];
return (
<div className="posts-container">
{blogPosts.map((post, index) => (
<Post key={index} index={index} post={post} />
))}
</div>
);
};
3.Post.js
import React from "react";
import "./style.css";
const Post = ({ post: { title, body,
imgUrl, author }, index }) =>
{
return (
<div className="post-container">
<h1 className="heading">{title}</h1>
<imgclassName="image" src={imgUrl} alt="post" />
<p>{body}</p>
<div className="info">
<h4>Written by: {author}</h4>
</div>
</div>
);
};
OUTPUT
This week will have many pages like Header,footer,categories and app.jsx
File Structure:
App.jsx
import "./index.css"
import "./App.css"
import products from "./assets/products.json"
import Product from "./components/Product";
<div className={"grid"}>
{
products.map((product, i) =><Product {...product} key={i}/>)
}
</div>
</main>
<div
id="snipcart"
data-api-
key="NWMwZWNkZGMtZjU2ZS00YzM3LWFlZjYtMmM5Zjk0MWViZDcxNjM3Njg0OTY
0ODg5NTk4MTM3" hidden
>
</div>
</div>
);
}
Components/Product/index.js
import "./index.css";
return (
<div
key={id}
className={"product"}
>
<img
src={imageUrl}
alt={`Image of ${name}`}
className={"image-product"}
/>
<h3>{name}</h3>
<p>{description}</p>
<span>${price}</span>
<div>
<button
className="snipcart-add-item"
data-item-id={id}
data-item-image={imageUrl}
data-item-name={name}
data-item-url="/"
data-item-price={price}
>
Add to Cart
</button>
</div>
</div>
);
}
Assets/products.json
[
{
"id": "t-shirt",
"name": "Fruits",
"price": 35.0,
"imageUrl": "https://www.lalpathlabs.com/blog/wp-content/uploads/2019/01/Fruits-and-
Vegetables.jpg",
"description": "A Basket of fruits",
"url": "/api/products/halfmoon"
},
{
"id": "wallet",
"name": "Vegitables",
"price": 20.0,
"imageUrl": "https://img.freepik.com/free-photo/bottom-view-fruits-vegetables-radish-cherry-
tomatoes-persimmon-tomatoes-kiwi-cucumber-apples-red-cabbage-parsley-quince-aubergines-
blue-table_140725-146174.jpg",
"description": "A Basket of Veges",
"url": "/api/products/wallet"
},
{
"id": "cup",
"name": "Milk",
"price": 5.0,
"imageUrl": "https://encrypted-
tbn0.gstatic.com/images?q=tbn:ANd9GcSeujHMy6OLRZHTpsrUMVLsHyio1mZiZI4fMQ&us
qp=CAU",
"description": "Healthy Milk",
"url": "/api/products/veiltail"
}
]
Output
File Structure:
firebase.js
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
const db = firebaseApp.firestore();
Note Replace the highlighted code with your firebase connection compoenents
You can get you own keys from firebase account for more details Take the
Reference of below video
https://www.youtube.com/watch?v=ad6IavyAHsQ
Todo.js
import { ListItem, List, ListItemAvatar, ListItemText, Button, Modal, makeStyles
} from '@material-ui/core'
import './Todo.css';
import React, { useState } from 'react';
import db from './firebase'
function Todo(props) {
const [open, setOpen] = useState(false);
const [input, setInput] = useState(props.todo.todo);
setOpen(true)
};
db.collection('todos').doc(props.todo.id).set({
todo: input
}, { merge: true })
setOpen(false);
}
return (
<>
<div
open={open}
onClose={e =>setOpen(false)}
>
<div >
<h1>I am a model</h1>
<input placeholder={props.todo.todo} value={input} onChange={event
=>setInput(event.target.value)} />
<button onClick={updateTodo}>Update Todo</button>
</div>
</div>
<ulclassName='todo_list'>
<li>
<li primary={props.todo.todo} secondary='Dummy deadline ⏰' />
</li>
<button onClick={e =>setOpen(true)}>Edit</button>
<button onClick={event
=>db.collection('todos').doc(props.todo.id).delete()}>❌DELETE ME</button>
</ul>
</>
)
}
function App() {
const [todos, setTodos] = useState([]);
const [input, setInput] = useState('');
// when the upload, we need to listen to the database and fetch new todos as they get
added/remove
useEffect(() => {
// This code here... fires when the app.js lodes
db.collection('todos').orderBy('timestamp', 'desc').onSnapshot(snapshot => {
// console.log(snapshot.docs.map(doc =>doc.data()));
setTodos(snapshot.docs.map(doc => ({id: doc.id, todo: doc.data().todo})))
})
}, []);
db.collection('todos').add({
todo: input,
timestamp: firebase.firestore.FieldValue.serverTimestamp()
})
setTodos([...todos, input]);
setInput(' '); // clear up the input after clicking todo
console.log(todos)
}
return (
<div className="App">
<h1>Build A TODO App 🚀!</h1>
<form>
<form>
<ul>
{todos.map(todo => (
<Todotodo={todo}/>
// <li>{todo}</li>
))}
<li></li>
</ul>
</div>
);
}
OUTPUT