0% found this document useful (0 votes)
243 views19 pages

React Portal Exercises (Day1-Day8) With Solutions

The document contains code snippets from multiple React projects created during a class or as practice exercises. It includes examples of HelloWorld components, inline styling, basic forms, dynamic rendering, toggling class names, surveys with autocomplete fields, login dialogs, error boundaries, and higher-order components.

Uploaded by

aathiprasanna8
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
243 views19 pages

React Portal Exercises (Day1-Day8) With Solutions

The document contains code snippets from multiple React projects created during a class or as practice exercises. It includes examples of HelloWorld components, inline styling, basic forms, dynamic rendering, toggling class names, surveys with autocomplete fields, login dialogs, error boundaries, and higher-order components.

Uploaded by

aathiprasanna8
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

React Projects

Day 2 Class Exercise Project1

HelloWorld.jsx

import React from 'react';

const HelloWorld = () => {

return(

<p>Hello World</p>

export default HelloWorld;

Day 2 Class Exercise Project2

InlineStyling.jsx

import React from 'react';

const InlineStyling = () => {

return (

<>

<h1 style={{color:'Green'}}>Inline Style in JSX Example.</h1>

<div data-testid="app" style={{backgroundColor:'lightblue', color:'darkblue', padding:'10px',


border:'1px solid blue', borderRadius:'5px'}}>

<p style={{color:'darkblue', fontSize:'16px'}}>This is a paragraph with inline styles applied</p>

</div>

</>

export default InlineStyling;

Day 2 Practice at Home Project1

Form.jsx

import React,{useState} from 'react';

const Form =() => {

const [formData,setFormData]=useState({

Name:'',
Email:'',

Message:' '

const handleChangeEvent = (event) => {

const{name,value} = event.target;

setFormData({

...formData,

[name]: value

const handleSubmit = (event)=>{

event.preventDefault();

console.log(formData);

return(

<>

<h1>Basic Form</h1>

<form method='POST' onSubmit={handleSubmit}>

<label htmlFor="Name">Name:</label>

<input type="text" name="Name" id="Name" onChange={handleChangeEvent}/>

<br></br>

<label htmlFor="Email">Email:</label>

<input type="text" name="Email" id="Email" onChange={handleChangeEvent} />

<br></br>

<label htmlFor="Message">Message:</label>

<input type="text" name="Message" id="Message" onChange={handleChangeEvent} />

<br></br>

<button type="Submit" onSubmit={handleSubmit}>Submit</button>

</form>
</>

export default Form;

Day 3 Class Exercise Project1

DynamicRendering.jsx

import React,{useState} from 'react';

const DynamicRendering = () => {

const [btnTxt,setBtnTxt]=useState('Show Component');

const [showData,setShowData]=useState(false);

const handleEvent = () => {

if(btnTxt==='Show Component'){

setBtnTxt('Hide Component');

setShowData(true);

else{

setBtnTxt('Show Component');

setShowData(false);

return (

<>

{ showData ? <p>Hi! How are You!!!</p> : <p></p>}

<button onClick={handleEvent}>{btnTxt}</button>

</>

export default DynamicRendering;

Day 3 Practice at Home Project1

App.jsx
import React, { useState } from 'react';

const App = () => {

const [transformation, setTransformation] = useState('Kaioken');

const toggleTransformation = () => {

setTransformation((prevTransformation) =>

prevTransformation === 'Kaioken' ? 'SuperSaiyan' : 'Kaioken'

);

};

return (

<div>

<h1 className={transformation}>Hello, World!</h1>

<button onClick={toggleTransformation}>Toggle Class</button>

</div>

);

};

export default App;

Day 4 Class Exercise Project1

FruitSurvey.jsx

import React, { useState } from 'react';

import { TextField, Autocomplete, Button } from '@mui/material';

import styled from 'styled-components';

const Fruits = ['Apple', 'Banana', 'Cherry', 'Durian', 'Elderberry'];

const FruitSurvey = () => {

const [name, setName] = useState('');

const [selectedValue, setSelectedValue] = useState(null);

const handleSubmit = (event) => {

event.preventDefault();

};

return (

<Form onSubmit={handleSubmit}>
<h1>Enter your name favourite friut :</h1>

<TextField

style={{ marginBottom: '10px' }}

variant="standard"

value={name}

onChange={(e) => setName(e.target.value)}

label="Name"

data-testid="name"

/>

<Autocomplete

style={{ width: '250px', marginBottom: '10px' }}

value={selectedValue}

onChange={(_, newValue) => setSelectedValue(newValue)}

options={Fruits}

renderInput={(params) => (

<TextField {...params} data-testid={`option-${selectedValue}`} label="Fruits"


variant="outlined" />

)}

data-testid="autocomplete"

/>

<Button type='submit' variant='contained' style={{ width: '150px' }} data-


testid="button">Submit</Button>

</Form>

);

};

const Form = styled.form`

width: 500px;

display: flex;

flex-direction: column;

justify-content: center;

align-items: left;

margin: 10px 0 0 10px;


`;

export default FruitSurvey;

Day 4 Practice at Home Project1

LoginButton.jsx

import React, { useState } from 'react';

import {

Button,

Dialog,

DialogTitle,

DialogContent,

DialogActions,

TextField,

} from '@mui/material';

const LoginButton = () => {

const [open, setOpen] = useState(false);

const [username, setUsername] = useState('');

const [password, setPassword] = useState('');

const handleLogin = () => {

console.log('Username:', username);

console.log('Password:', password);

handleClose();

};

const handleOpen = () => {

setOpen(true);

};

const handleClose = () => {

setOpen(false);

};

return (

<div>
<Button data-testid="login" onClick={handleOpen} variant="outlined">

Login

</Button>

<Dialog open={open} onClose={handleClose}>

<DialogTitle>Login</DialogTitle>

<DialogContent>

<TextField

data-testid="username"

label="Username"

variant="outlined"

fullWidth

value={username}

onChange={(e) => setUsername(e.target.value)}

/>

<TextField

data-testid="password"

label="Password"

variant="outlined"

fullWidth

type="password"

value={password}

onChange={(e) => setPassword(e.target.value)}

/>

</DialogContent>

<DialogActions>

<Button data-testid="cancel" onClick={handleClose} color="primary">

Cancel

</Button>

<Button data-testid="dia-login" onClick={handleLogin} color="primary">

Login

</Button>
</DialogActions>

</Dialog>

</div>

);

};

export default LoginButton;

Day 5 Class Exercise Project1

ErrorBoundary.jsx

import React, { Component } from 'react';

import PropTypes from 'prop-types';

class ErrorBoundary extends Component {

constructor(props) {

super(props);

this.state = { hasError: false, error: null };

static getDerivedStateFromError(error) {

return { hasError: true, error };

componentDidCatch(error, errorInfo) {

console.error(error, errorInfo);

render() {

if (this.state.hasError) {

return <p>Error: {this.state.error.message}</p>;

return this.props.children;

ErrorBoundary.propTypes = {

children: PropTypes.node.isRequired,
};

export default ErrorBoundary;

List.jsx

import React, { Component } from 'react';

import ErrorBoundary from './ErrorBoundary';

class List extends Component {

constructor(props) {

super(props);

this.state = { data: [1, 2, 3, 4, 5] };

componentDidUpdate() {

throw new Error('An error occurred in List component');

render() {

return (

<ErrorBoundary>

<ul>

{this.state.data.map(item => (

<li key={item}>{item}</li>

))}

</ul>

</ErrorBoundary>

);

export default List;

Day 5 Practice at Home Project1

LifeCycle.jsx

import React, { Component } from 'react';

class LifeCycle extends Component {


constructor(props) {

super(props);

this.state = {

msg: 'IamNEO',

};

componentDidMount() {

console.log('Component Did MOUNT!');

componentDidUpdate(prevProps, prevState) {

console.log('Component Did UPDATE!');

componentWillUnmount() {

console.log('Component Will UNMOUNT!');

handleClick = () => {

console.log('Button Clicked!');

this.setState({

msg: 'Welcome to React',

});

};

render() {

return (

<div>

<h1>{this.state.msg}</h1>

<button onClick={this.handleClick}>Change Message</button>

</div>

);

export default LifeCycle;


Day 6 Class Exercise Project1

App.jsx

import React from 'react';

import { WithProductList } from './WithProductList';

import ProductListComponent from './ProductListComponent';

const Products = [

{ id: 1, name: 'Product 1', price: 19.99, imageUrl: 'product1.jpg' },

{ id: 2, name: 'Product 2', price: 29.99, imageUrl: 'product2.jpg' },

];

const EnhancedProductList = WithProductList(ProductListComponent, Products);

const App = () => {

return (

<div>

<h1>Your App Title</h1>

{/* Render the enhanced ProductListComponent */}

<EnhancedProductList />

</div>

);

};

export default App;

ProductListComponent.jsx

import React from 'react';

const ProductListComponent = ({ productList }) => {

return (

<ul>

{productList.map((product) => (

<li key={product.id}>

<div>{product.name}</div>

<div>${product.price.toFixed(2)}</div>

</li>

))}
</ul>

);

};

export default ProductListComponent;

WithProductList.jsx

import React from 'react';

export const WithProductList = (WrappedComponent, productList) => {

return () => <WrappedComponent productList={productList} />;

};

Day 6 Practice at Home Project1

FilterOption.jsx

import React, { useContext } from 'react';

import { ProductContext } from './ProductContext';

const FilterOptions = () => {

const { state, dispatch } = useContext(ProductContext);

const handlePriceChange = (e, type) => {

dispatch({ type: 'SET_PRICE_RANGE', payload: { ...state.priceRange, [type]: e.target.value } });

};

return (

<div>

<h2>Filter Options</h2>

<label>

Min Price:

</label>

<input

type="number"

value={state.priceRange.min}

onChange={(e) => handlePriceChange(e, 'min')}

/>

<label>
Max Price:

</label>

<input

type="number"

value={state.priceRange.max}

onChange={(e) => handlePriceChange(e, 'max')}

/>

</div>

);

};

export default FilterOptions;

ProductContext.jsx

import React, { createContext, useReducer, useEffect, useMemo } from 'react';

import PropTypes from 'prop-types';

import axios from 'axios';

const initialState = {

categories: [],

products: [],

filteredProducts: [],

priceRange: { min: 0, max: 1000 },

};

const productReducer = (state, action) => {

let min, max, filtered;

switch (action.type) {

case 'SET_CATEGORIES':

return { ...state, categories: action.payload };

case 'SET_PRODUCTS':

return { ...state, products: action.payload, filteredProducts: action.payload };

case 'SET_PRICE_RANGE':

return { ...state, priceRange: action.payload };

case 'FILTER_PRODUCTS':
min = state.priceRange.min;

max = state.priceRange.max;

filtered = state.products.filter(product => product.price >= min && product.price <= max);

return { ...state, filteredProducts: filtered };

default:

return state;

};

const ProductContext = createContext();

const ProductProvider = ({ children }) => {

const [state, dispatch] = useReducer(productReducer, initialState);

const contextValue = useMemo(() => ({ state, dispatch }), [state, dispatch]);

const fetchCategories = async () => {

try {

const response = await axios.get('API_ENDPOINT/categories');

dispatch({ type: 'SET_CATEGORIES', payload: response.data });

} catch (error) {

console.error('Error fetching categories:', error);

};

const fetchProducts = async () => {

try {

const response = await axios.get('API_ENDPOINT/products');

dispatch({ type: 'SET_PRODUCTS', payload: response.data });

} catch (error) {

console.error('Error fetching products:', error);

};

useEffect(() => {

fetchCategories();

fetchProducts();
}, []);

return (

<ProductContext.Provider value={contextValue}>

{children}

</ProductContext.Provider>

);

};

ProductProvider.propTypes = {

children: PropTypes.node.isRequired,

};

export { ProductProvider, ProductContext };

ProductList.jsx

import React, { useContext, useEffect } from 'react';

import { ProductContext } from './ProductContext';

const ProductList = () => {

const { state, dispatch } = useContext(ProductContext);

useEffect(() => {

dispatch({ type: 'FILTER_PRODUCTS' });

}, [state.priceRange, dispatch]);

return (

<div>

<h2>Product List</h2>

{state.filteredProducts.map(product => (

<div key={product.id}>

<p>{product.name}</p>

<p>{product.price}</p>

</div>

))}

</div>

);

};
export default ProductList;

Day 7 Class Exercise Project1

BookList.jsx

import React, { useState, useEffect } from 'react';

const BookList = () => {

const [books, setBooks] = useState([]);

useEffect(() => {

const fetchData = async () => {

try {

const response = await fetch('https://example.com/books');

const data = await response.json();

const transformedData = data.data.map(book => ({

id: book.id,

title: book.title,

author: book.author

}));

setBooks(transformedData);

} catch (error) {

console.error('Error fetching data:', error);

};

fetchData();

}, []);

return (

<div>

<h1>Book List</h1>

<ul>

{books.map(book => (

<li key={book.id}>

<strong>{book.title}</strong> by {book.author}
</li>

))}

</ul>

</div>

);

};

export default BookList;

Day 7 Practice at Home Project1

ProductCard.jsx

import React from 'react';

const ProductCard = ({ name, description, price }) => {

return (

<div style={{ border: '1px solid #ccc', padding: '16px', borderRadius: '8px' }}>

<h2>{name}</h2>

<p>{description}</p>

<p>Price: ${price.toFixed(2)}</p>

</div>

export default ProductCard;

ProductList.jsx

import React, { useState, useEffect } from 'react';

import ProductCard from './ProductCard';

const ProductList = () => {

const [products, setProducts] = useState([]);

useEffect(() => {

const apiUrl = 'http://localhost:3001/products';

fetch(apiUrl)

.then(response => response.json())

.then(data => setProducts(data))


.catch(error => console.error('Error fetching data:', error));

}, []);

return (

<div>

<h1>Product List</h1>

<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '16px' }}>

{products.map(product => (

<ProductCard

key={product.id}

name={product.name}

description={product.description}

price={product.price}

/>

))}

</div>

</div>

);

};

export default ProductList;

Product.json

"products": [

"id": 1,

"name": "ProductA",

"description": "This is Product A",

"price": 10.99

Day 8 Class Exercise Project1


ReactApp.jsx

import React, { useState, useEffect } from 'react';

const ReactApp = () => {

const [message, setMessage] = useState("Hello dear one, learning React...?");

useEffect(() => {

console.log('useEffect hook called');

const timeoutId = setTimeout(() => {

setMessage("Great.... This is time to learn about HOOKS");

}, 2000);

return () => {

clearTimeout(timeoutId);

};

}, []);

return (

<div>

<p>{message}</p>

</div>

);

};

export default ReactApp;

You might also like