🌸
💫
Skip to content

Best Practices

Each component should only be responsible for one functionality.

// Bad: Multiple responsibilities
function UserDashboard() {
// Handle user data
// Handle order data
// Handle chart display
}
// Good: Split into multiple components
function UserDashboard() {
return (
<div>
<UserInfo />
<OrderList />
<StatisticsChart />
</div>
);
}

Use Context API or state management libraries to avoid excessive props passing.

// Use Context
const UserContext = createContext();
function App() {
const [user, setUser] = useState(null);
return (
<UserContext.Provider value={{ user, setUser }}>
<Dashboard />
</UserContext.Provider>
);
}
import { useMemo, useCallback } from 'react';
function ExpensiveComponent({ data, onUpdate }) {
// Cache computation results
const processedData = useMemo(() => {
return data.map(item => heavyComputation(item));
}, [data]);
// Cache callback functions
const handleClick = useCallback(() => {
onUpdate(processedData);
}, [onUpdate, processedData]);
return <div onClick={handleClick}>{processedData}</div>;
}
import { lazy, Suspense } from 'react';
const HeavyComponent = lazy(() => import('./HeavyComponent'));
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<HeavyComponent />
</Suspense>
);
}
src/
├── components/ # Reusable components
│ ├── Button/
│ ├── Input/
│ └── Card/
├── pages/ # Page components
│ ├── Home/
│ ├── About/
│ └── Dashboard/
├── hooks/ # Custom Hooks
│ ├── useAuth.js
│ └── useFetch.js
├── utils/ # Utility functions
│ ├── helpers.js
│ └── constants.js
├── context/ # Context definitions
│ └── AuthContext.js
└── App.jsx