๐ 1. Quick Setup (Vite + React + TypeScript)
๐ฆ Installation
# Create project
npm create vite@latest my-app -- --template react-ts
# Move into project
cd my-app
# Install dependencies
npm install
# Start dev server
npm run dev
๐๏ธ 2. Project Structure Explained
my-app/
โโโ public/ # Static assets (favicon, robots.txt)
โ โโโ vite.svg
โโโ src/ # All source code lives here
โ โโโ assets/ # Images, fonts, etc.
โ โโโ components/ # Reusable UI components
โ โ โโโ Button.tsx
โ โโโ pages/ # Pages for routes (e.g., Home, About)
โ โ โโโ Home.tsx
โ โโโ hooks/ # Custom React hooks
โ โโโ styles/ # Global styles (e.g., Tailwind, CSS Modules)
โ โโโ App.tsx # Root component
โ โโโ main.tsx # Entry point (ReactDOM.render)
โ โโโ types/ # Shared TypeScript types
โโโ .eslintrc.cjs # Linting rules
โโโ index.html # HTML template
โโโ package.json # Project config and dependencies
โโโ tsconfig.json # TypeScript configuration
โโโ vite.config.ts # Vite config
๐ก 3. Core Files & Concepts
main.tsx
โ Entry Point
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './styles/global.css'; // if using global styles
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
App.tsx
โ Root Component
import React from 'react';
import Home from './pages/Home';
function App() {
return (
<div className="App">
<h1>Welcome to React</h1>
<Home />
</div>
);
}
export default App;
๐งฉ 4. Component Example
๐ 5. Routing Setup (with react-router-dom
)
๐ฆ Install
npm install react-router-dom
๐ ๏ธ Setup
main.tsx
import { BrowserRouter } from 'react-router-dom';
ReactDOM.createRoot(document.getElementById('root')!).render(
<BrowserRouter>
<App />
</BrowserRouter>
);
App.tsx
import { Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
);
}
๐ฃ 6. Custom Hook Example
hooks/useCounter.ts
import { useState } from 'react';
export function useCounter(initial = 0) {
const [count, setCount] = useState(initial);
const increment = () => setCount((c) => c + 1);
const decrement = () => setCount((c) => c - 1);
return { count, increment, decrement };
}
๐งช 7. Testing Setup
๐ฆ Install
npm install --save-dev vitest @testing-library/react @testing-library/jest-dom
๐จ 9. Styling Options
Utility-first CSS
Tailwind CSS
Component-scoped
CSS Modules / Styled-components
Global CSS
Plain CSS / SCSS
# Tailwind example setup
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
๐ฆ 10. Helpful Commands
Start dev server
npm run dev
Build for prod
npm run build
Preview build
npm run preview
Run tests
npx vitest
or npm run test
Format code
npx prettier --write .
Back to top