Advanced React Development: Scaffolding and Component Patterns
React Project Scaffolding
Frontend Development Tools
Modern JavaScript frameworks provide CLI tools for project generation:
// Install React CLI globally
npm install -g create-react-app
// Create new project
create-react-app project-name
cd project-name
npm start
Key features include preconfigured Webpack setups, development servers, and optimized production builds.
Package Management Comparison
| npm | yarn |
|---|---|
| npm install | yarn |
| npm install package | yarn add package |
| npm uninstall package | yarn remove package |
| npm cache clean | yarn cache clean |
Component-Based Architecture
React applications are built using reusable components:
// Function component example
function UserCard({name, role}) {
return (
<div className="card">
<h3>{name}</h3>
<p>{role}</p>
</div>
);
}
Componant Lifecycle Methods
class DataLoader extends React.Component {
componentDidMount() {
fetchData(this.props.url);
}
componentDidUpdate(prevProps) {
if (this.props.url !== prevProps.url) {
this.refreshData();
}
}
componentWillUnmount() {
this.abortController.abort();
}
}
Component Communication Pattterns
Parent-to-child via props:
// Parent component
<UserProfile
avatar={user.image}
bio={user.description}
/>
// Child component
function UserProfile({avatar, bio}) {
return (
<div>
<img src={avatar} />
<p>{bio}</p>
</div>
);
}
Child-to-parent via callback functions:
// Parent component
function SearchPage() {
const handleSearch = (term) => {
/* update state */
};
return <SearchBar onSubmit={handleSearch} />;
}
// Child component
function SearchBar({ onSubmit }) {
return (
<input
type="text"
onChange={(e) => onSubmit(e.target.value)}
/>
);
}
Slot Pattern Implementation
function CardLayout({ header, content, footer }) {
return (
<div className="card">
<div className="header">{header}</div>
<div className="content">{content}</div>
<div className="footer">{footer}</div>
</div>
);
}
// Usage
<CardLayout
header={<UserAvatar />}
content={<UserBio />}
footer={<ActionButtons />}
/>
Context API for Global State
const ThemeContext = React.createContext();
function App() {
return (
<ThemeContext.Provider value="dark">
<NavigationBar />
</ThemeContext.Provider>
);
}
function NavigationBar() {
const theme = useContext(ThemeContext);
return <nav className={theme}>...</nav>;
}
Component Composition Patterns
function PageLayout({ sidebar, mainContent }) {
return (
<div className="container">
<aside>{sidebar}</aside>
<main>{mainContent}</main>
</div>
);
}