typescriptintermediate
Render Prop Pattern
Share stateful logic between components using the render prop pattern for maximum flexibility.
typescriptPress ⌘/Ctrl + Shift + C to copy
import { useState, useEffect } from 'react';
interface MousePosition {
x: number;
y: number;
}
export function MouseTracker({
render,
}: {
render: (pos: MousePosition) => React.ReactNode;
}) {
const [pos, setPos] = useState<MousePosition>({ x: 0, y: 0 });
useEffect(() => {
const handler = (e: MouseEvent) => setPos({ x: e.clientX, y: e.clientY });
window.addEventListener('mousemove', handler);
return () => window.removeEventListener('mousemove', handler);
}, []);
return <>{render(pos)}</>;
}
// Usage:
// <MouseTracker render={({ x, y }) => <span>({x}, {y})</span>} />Use Cases
- Mouse tracking
- Toggle logic sharing
- Data fetching wrappers
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
typescriptadvanced
Compound Component Pattern
Build flexible compound components using React Context for implicit parent-child communication.
Best for: Accordion components
#patterns#compound-component
typescriptintermediate
Event-Driven Architecture Pattern
Build loosely coupled systems with typed event bus, async event handlers, and domain event patterns.
Best for: Microservice communication
#nodejs#events
typescriptadvanced
Server/Client Component Patterns
Correctly compose server and client components with data fetching, interactivity, and composition patterns.
Best for: RSC architecture planning
#nextjs#rsc
typescriptadvanced
React Compound Component Pattern
Build flexible compound components using React context for shared state between related parts.
Best for: Building flexible component libraries
#react#patterns