by Ahmed Megahd
1
2
3
4
1
2
1
2
3
4
1
2
3
const UserCard = React.memo(({ user }) => {
console.log("Rendering UserCard");
return <div>{user.name}</div>;
});
function ParentComponent({ user }) {
return <UserCard user={user} />;
}
const filteredItems = useMemo(() => {
return items.filter(item => item.category === selectedCategory);
}, [items, selectedCategory]);
import { useCallback } from "react";
function ParentComponent() {
const handleClick = useCallback(() => {
console.log("Button clicked");
}, []);
return <Button onClick={handleClick} />;
}
//React Query is a library that helps manage, cache, and synchronize data fetching
import { useQuery } from 'react-query';
import axios from 'axios';
function fetchUsers() {
return axios.get('/api/users');
}
function UserList() {
const { data, error, isLoading } = useQuery('users', fetchUsers, {
staleTime: 5 * 60 * 1000, // Data remains fresh for 5 minutes
retry: 3, // Automatically retry failed requests up to 3 times
});
if (isLoading) return <div>Loading...</div>;
if (error) return <div>Error loading users</div>;
return (
<ul>
{data?.data.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
react-virtualized
to Render a Huge List Efficientlyimport { List } from 'react-virtualized';
const rowRenderer = ({ index, key, style }) => (
<div key={key} style={style}>
Row {index}
</div>
);
function LargeList() {
return (
<List
width={300}
height={400}
rowHeight={35}
rowCount={1000}
rowRenderer={rowRenderer}
/>
);
}
// Webpack configuration for code splitting and tree shaking
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
},
usedExports: true, // Enables tree shaking
},
};
new ModuleFederationPlugin({
name: "App1",
filename: "remoteEntry.js",
exposes: { "./Header": "./src/Header" },
});
const Header = () => <h1>Hello from App1!</h1>;
export default Header;
new ModuleFederationPlugin({
name: "App2",
remotes: { App1: "App1@http://localhost:3001/remoteEntry.js" },
});
const Header = React.lazy(() => import("App1/Header"));
return (
<React.Suspense fallback="Loading...">
<Header />
</React.Suspense>
);
1
2
3
4
5
6
7