Table of Contents
Table of Contents................................................................................................................... 1
React Quick Start - Key Concepts:.......................................................................................1
Creating and Nesting Components:..................................................................................... 1
Writing Markup with JSX:...................................................................................................... 2
Adding Styles:........................................................................................................................ 2
Displaying Data:..................................................................................................................... 3
Conditional Rendering:......................................................................................................... 3
Rendering Lists:..................................................................................................................... 4
Responding to Events:.......................................................................................................... 5
Updating the Screen:............................................................................................................. 5
Using Hooks:.......................................................................................................................... 6
Sharing Data Between Components.................................................................................... 7
Scenario 1: Independent Component State....................................................................... 7
Diagram:....................................................................................................................... 7
Scenario 2: Shared State................................................................................................... 7
Diagram:....................................................................................................................... 8
Code Example:...................................................................................................................8
Key Concepts:.................................................................................................................... 9
Next Steps...............................................................................................................................9
React Quick Start - Key Concepts:
● Create and nest components.
● Add markup and styles.
● Display data.
● Render conditions and lists.
● Respond to events and update the screen.
● Share data between components.
Creating and Nesting Components:
● React apps are built from components.
● A component represents a part of the UI, with its own logic and appearance.
● Components can range from small (e.g., button) to large (e.g., entire page).
● React components are JavaScript functions returning markup.
function MyButton() {
return (
<button>I'm a button</button>
);
}
● Components can be nested into other components.
export default function MyApp() {
return (
<div>
<h1>Welcome to my app</h1>
<MyButton />
</div>
);
}
● Component names must start with a capital letter (e.g., <MyButton />).
● HTML tags must remain lowercase (e.g., <div> or <button>).
● Use export default for the main component in a file.
● For JavaScript syntax references, check MDN or javascript.info.
Writing Markup with JSX:
● JSX is a syntax extension for writing markup in React (commonly used in React
projects).
● Supported out of the box by recommended React development tools.
● Stricter than HTML:
○ Tags must always be closed (e.g., <br />).
○ Components must return a single parent element, like a <div> or <>...</>
(fragment wrapper).
function AboutPage() {
return (
<>
<h1>About</h1>
<p>Hello there.<br />How do you do?</p>
</>
);
}
● Use an online converter to easily port large amounts of HTML to JSX.
Adding Styles:
● Use className in React instead of class in HTML.
<img className="avatar" />
● Write CSS rules in a separate CSS file:
/* Example CSS */
.avatar {
border-radius: 50%;
}
● React does not enforce a specific method for adding CSS.
● Simplest approach: add a <link> tag to your HTML for the CSS file.
● For build tools or frameworks, refer to their respective documentation for adding
CSS.
Displaying Data:
● JSX allows embedding JavaScript variables into markup using curly braces {}.
● For example, {user.name} displays the value of user.name.
<h1>{user.name}</h1>
● You can use curly braces in JSX attributes to pass JavaScript values (not just
strings).
● For example, src={user.imageUrl} uses the value of user.imageUrl for the
src attribute.
<img className="avatar" src={user.imageUrl} />
● Complex expressions can also be used inside JSX curly braces (e.g., string
concatenation).
alt={'Photo of ' + user.name}
● The style attribute uses a regular JavaScript object inside curly braces to apply
styles dynamically.
style={{ width: user.imageSize, height: user.imageSize }}
Conditional Rendering:
● React uses standard JavaScript techniques for conditions (no special syntax).
● Use an if statement to conditionally include JSX.
let content;
if (isLoggedIn) {
content = <AdminPanel />;
} else {
content = <LoginForm />;
}
return <div>{content}</div>;
● Use the conditional ? operator for more compact code inside JSX.
<div>
{isLoggedIn ? <AdminPanel /> : <LoginForm />}
</div>
● Use logical && for conditions without an else branch.
<div>
{isLoggedIn && <AdminPanel />}
</div>
● These techniques also work for conditionally setting attributes.
● If unfamiliar with these syntaxes, start by using if...else.
Rendering Lists:
● Use JavaScript features like for loops and map() to render lists of components.
● Example: an array of products:
const products = [
{ title: 'Cabbage', id: 1 },
{ title: 'Garlic', id: 2 },
{ title: 'Apple', id: 3 },
];
● Use map() to transform the array into a list of <li> items.
const listItems = products.map(product =>
<li key={product.id}>
{product.title}
</li>
);
● Return the list inside an unordered list (<ul>).
return <ul>{listItems}</ul>;
● Each list item (<li>) must have a key attribute to uniquely identify it.
● The key usually comes from the data (e.g., database ID).
● React uses key to track changes when inserting, deleting, or reordering items.
● Example with conditional styling:
<li
key={product.id}
style={{ color: product.isFruit ? 'magenta' : 'darkgreen' }}
>
{product.title}
</li>
Responding to Events:
● Declare event handler functions inside components.
function handleClick() {
alert('You clicked me!');
}
● Attach event handlers using JSX attributes (e.g., onClick={handleClick}).
<button onClick={handleClick}>Click me</button>
● Do not add parentheses to the event handler (e.g., onClick={handleClick()} is
wrong).
● React will call the event handler when the event occurs.
Updating the Screen:
● To track and display information, add state to components.
● Import useState from React.
import { useState } from 'react';
● Declare a state variable inside the component.
const [count, setCount] = useState(0);
● useState returns two values: current state (count) and the function to update it
(setCount).
● Convention: [stateVariable, setStateFunction].
● Pass initial value to useState (e.g., 0 for count).
const [count, setCount] = useState(0);
● Call the update function (setCount()) to change state (e.g., setCount(count +
1)).
function handleClick() {
setCount(count + 1);
}
● React re-renders the component with updated state on each click.
● Each instance of the component maintains its own state.
<MyButton />
<MyButton />
● Clicking one button doesn’t affect others; each button remembers its own count.
Using Hooks:
● Functions starting with use are called Hooks (e.g., useState).
● useState is a built-in Hook provided by React.
● Other built-in Hooks are available in the React API reference.
● You can create custom Hooks by combining existing ones.
● Hooks have restrictions:
○ Call Hooks only at the top level of components or other Hooks.
○ Avoid calling Hooks inside conditions or loops; create a new component
instead.
Sharing Data Between Components
Scenario 1: Independent Component State
● Each MyButton has its own independent state (count).
● Clicking a button updates only that button’s count.
Diagram:
MyApp
└── MyButton (count: 0)
└── MyButton (count: 0)
● Initial: Each MyButton has count = 0.
● After Click: Only the clicked button updates its count.
Scenario 2: Shared State
● Move state “upwards” to the closest common parent (MyApp).
● Shared state is passed down to child components (MyButton).
● Both buttons update together when the state in MyApp changes.
Diagram:
MyApp (count: 0)
└── MyButton (count: 0)
└── MyButton (count: 0)
● Initial: MyApp has count = 0; passed down to MyButton.
● After Click: MyApp updates count to 1; both MyButton update their count.
Code Example:
● Move state to parent MyApp.
export default function MyApp() {
const [count, setCount] = useState(0);
function handleClick() {
setCount(count + 1);
}
return (
<div>
<h1>Counters that update together</h1>
<MyButton count={count} onClick={handleClick} />
<MyButton count={count} onClick={handleClick} />
</div>
);
}
● Pass state as props to MyButton.
function MyButton({ count, onClick }) {
return (
<button onClick={onClick}>
Clicked {count} times
</button>
);
}
● Props: count and onClick are passed down to MyButton.
Key Concepts:
● Lifting state up: Move state to the parent and pass it down as props.
● Props: Data passed from parent to child components (e.g., count, onClick).
Next Steps
● Basics Learned: Components, JSX, Hooks, State, Events, Props.
● Next Goal: Build a small React app using these concepts.