Lesson 3 - RandomQuote App
Goal : Illustrate how to use useState by creating RandomQuote App

1. Set up a new React project
Create the project: Run the following command in your terminal:
npx create-react-app random-quote-app cd random-quote-app
Install Bootstrap: Install Bootstrap for styling:
npm install bootstrap
Import Bootstrap CSS in your
index.js
:import 'bootstrap/dist/css/bootstrap.min.css';
2. Structure the components
In src folder- App.jsx
(Parent Component): Manages the state and passes props toRandomQuote
.In src/components folder - RandomQuote.jsx
(Child Component): Displays the quote and handles button clicks.
3. Implement the components
App.jsx
Initializes state with a default quote.
Defines an array of quotes.
Creates a
getRandomQuote
function to generate a random index and update thequote
state.Renders the
RandomQuote
component, passing thequote
andgetRandomQuote
function as props.use two useState for updating the state of current quote and text color:
import React, { useState } from 'react';
import RandomQuote from './RandomQuote';
const quotes = [
{ author: "Albert Einstein", content: "Life is like riding a bicycle. To keep your balance you must keep moving." },
{ author: "Maya Angelou", content: "You will face many defeats in life, but never let yourself be defeated." },
{ author: "Oscar Wilde", content: "Be yourself; everyone else is already taken." },
{ author: "Mark Twain", content: "The secret of getting ahead is getting started." },
{author: "Dennis Prager", content:"Goodness is about character - integrity, honesty, kindness, generosity, moral courage, and the like. More than anything else, it is about how we treat other people." },
];
function App() {
const [quote, setQuote] = useState(quotes[0]);
const [color, setColor] = useState('#17a2b8');
const getRandomQuote = () => {
const randomIndex = Math.floor(Math.random() * quotes.length);
const randomColor = `#${Math.floor(Math.random() * 16777215).toString(16)}`;
setQuote(quotes[randomIndex]);
setColor(randomColor);
};
return (
<div className="d-flex flex-column align-items-center justify-content-center vh-100" style={{ backgroundColor: color, color: 'white' }}>
<RandomQuote
quote={quote}
color={color}
onChangeQuote={getRandomQuote}
/>
</div>
);
}
export default App;
Key Points
The
useState
hook is used to manage the current quote.Props (
quote, color
andonChangeQuote
) are passed from the parent component to the child component.The
getRandomQuote
prop is used to update the state in the parent component.Bootstrap is used for basic styling (you can customize it further).
RandomQuote.jsx
Receives
quote, color
andonChangeQuote
as props.Displays the
quote
within a Bootstrap card.Renders a button that, when clicked, triggers the
onChangeQuote
function passed from the parent component.
import React from 'react';
function RandomQuote({ quote, color, onChangeQuote }) {
return (
<div className="p-4 bg-white rounded shadow text-center" style={{ color: color }}>
<p className="mb-3" style={{ fontSize: '1.5rem' }}>"{quote.content}"</p>
<p className="mb-4 fw-bold fst-italic">- {quote.author}</p>
<button className="btn btn-primary" onClick={onChangeQuote}>
Get New Quote
</button>
</div>
);
}
export default RandomQuote;
4. Test the App
Start the development server:
npm run dev
Open the browser and view your app. When you click the "Get New Quote" button, a random quote with a new background color will appear.

5. Optional Enhancements
Add animations: Use CSS or libraries like
react-transition-group
to add fade effects when changing quotes.Persist state: Use
localStorage
to remember the last quote displayed.API Integration: Replace the static array with an API call to fetch quotes dynamically.
This structure provides a reusable child component and showcases the flow of data between the parent and child using props and state.
Last updated