Component Anatomy
// components/button.tsx
export default function Button() {
const greet = () => alert("Hi!");
return <button onClick={greet()}>Click me</button>;
}
// index.tsx
import Button from "/components/button.tsx";
function Homepage() {
return (
<div>
<Button /> // Hi!
</div>
);
}
Hooks
useState
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}
useEffect
import { useState, useEffect } from "react";
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const interval = setInterval(() => setSeconds((sec) => sec + 1), 1000);
return () => clearInterval(interval);
}, []); // without dependencies usEffect will run only once
return <p>Seconds: {seconds}</p>;
}