Approach : Use context and portals.
// ModalContext.tsx
const ModalContext = createContext(null);
export const useModal = () => useContext(ModalContext);
export function ModalProvider({ children }) {
const [content, setContent] = useState(null);
return (
<ModalContext.Provider value=>
{children}
{content &&
ReactDOM.createPortal(
<div className="modal-backdrop">{content}</div>,
document.body
)}
</ModalContext.Provider>
);
}
Usage :
const { setContent } = useModal();
setContent(<MyModalContent onClose={() => setContent(null)} />);
Approach :
Promise.all or async/await.useEffect.useEffect(() => {
const fetchData = async () => {
const [user, posts] = await Promise.all([
fetch("/api/user").then((res) => res.json()),
fetch("/api/posts").then((res) => res.json()),
]);
setData({ user, posts });
};
fetchData();
}, []);
Bonus : Add loading/error states and use AbortController for cleanup.
Approach :
shared/ directory.Tool : Use @dnd-kit/core or react-beautiful-dnd.
Example with react-beautiful-dnd :
<DragDropContext onDragEnd={handleDragEnd}>
<Droppable droppableId="list">
{(provided) => (
<ul {...provided.droppableProps} ref={provided.innerRef}>
{items.map((item, index) => (
<Draggable key={item.id} draggableId={item.id} index={index}>
{(provided) => (
<li
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
>
{item.name}
</li>
)}
</Draggable>
))}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
Architecture :
Polling fallback if needed.
Component strategy :
Show loading/skeleton states.
Infrastructure :
Approach :
High-level API :
<DataTable
data={data}
columns={[
{ key: "name", label: "Name", sortable: true },
{ key: "email", label: "Email" },
]}
pagination=
onSort={(key, direction) => {}}
onFilter={(query) => {}}
/>
Implementation considerations :
useMemo) for derived data.Plan :
Strategies :
SWR, React Query) to avoid duplicate requests.const fetcher = async (url) => {
const res = await fetch(url);
if (res.status === 429) {
await new Promise((r) => setTimeout(r, 1000)); // simple backoff
return fetcher(url);
}
return res.json();
};