From harness-claude
Implements React render props pattern to share stateful logic via render functions. Use for variable rendering, class components, third-party libs, or library distribution.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Share stateful logic by passing a render function as a prop
Implements React component patterns: compound components with context, render props, HOCs, custom hooks, provider with reducer, controlled/uncontrolled, prop getters, state reducer.
Implements React hooks pattern to extract and reuse stateful logic like data fetching or form state across components using custom hooks with TypeScript typing.
Provides React patterns like compound components, render props, custom hooks, and HOCs for scalable frontend apps. Use for component design, state management, and best practices.
Share bugs, ideas, or general feedback.
Share stateful logic by passing a render function as a prop
render prop (or children as a function) that receives the state as arguments.interface MousePosition { x: number; y: number }
function MouseTracker({ render }: { render: (pos: MousePosition) => React.ReactNode }) {
const [pos, setPos] = useState<MousePosition>({ x: 0, y: 0 });
return (
<div onMouseMove={(e) => setPos({ x: e.clientX, y: e.clientY })}>
{render(pos)}
</div>
);
}
// Usage
<MouseTracker render={({ x, y }) => <p>Mouse at {x}, {y}</p>} />
Render props were the dominant pattern for logic reuse before React hooks. With hooks available, most new render props use cases should be implemented as custom hooks instead. However, render props remain valuable in specific scenarios:
Children as function is a common variant:
<MouseTracker>{({ x, y }) => <p>At {x}, {y}</p>}</MouseTracker>
Trade-offs vs hooks:
https://patterns.dev/react/render-props-pattern