This collection provides production-ready React function components for common UI patterns. All components use modern React hooks and follow best practices.
Component Categories
Interactive User input and interaction components
Toggle
Star Rating
Password Revealer
Data Display Components for displaying data
DataTable
DataList
TreeView
Feedback User feedback components
Tooltip
Alert
Modal Dialog
Quick Examples
Toggle Component
A simple toggle component that acts as a visual checkbox:
const Toggle = ({ defaultToggled = false }) => {
const [ isToggleOn , setIsToggleOn ] = React . useState ( defaultToggled );
return (
< label className = { isToggleOn ? 'toggle on' : 'toggle off' } >
< input
type = "checkbox"
checked = { isToggleOn }
onChange = { () => setIsToggleOn ( ! isToggleOn ) }
/>
{ isToggleOn ? 'ON' : 'OFF' }
</ label >
);
};
.toggle input [ type = "checkbox" ] {
display : none ;
}
.toggle.on {
background-color : green ;
}
.toggle.off {
background-color : red ;
}
Star Rating Component
Create an interactive star rating component:
const Star = ({ marked , starId }) => {
return (
< span data-star-id = { starId } className = "star" role = "button" >
{ marked ? ' \u2605 ' : ' \u2606 ' }
</ span >
);
};
const StarRating = ({ value }) => {
const [ rating , setRating ] = React . useState ( parseInt ( value ) || 0 );
const [ selection , setSelection ] = React . useState ( 0 );
const hoverOver = event => {
let val = 0 ;
if ( event && event . target && event . target . getAttribute ( 'data-star-id' ))
val = event . target . getAttribute ( 'data-star-id' );
setSelection ( val );
};
return (
< div
onMouseOut = { () => hoverOver ( null ) }
onClick = { e => setRating ( e . target . getAttribute ( 'data-star-id' ) || rating ) }
onMouseOver = { hoverOver }
>
{ Array . from ({ length: 5 }, ( v , i ) => (
< Star
starId = { i + 1 }
key = { `star_ ${ i + 1 } ` }
marked = { selection ? selection >= i + 1 : rating >= i + 1 }
/>
)) }
</ div >
);
};
The StarRating component uses two state variables: rating for the actual value and selection for hover preview.
Data Display Components
DataList Component
Transform an array into an ordered or unordered list:
const DataList = ({ isOrdered = false , data }) => {
const list = data . map (( val , i ) => < li key = { ` ${ i } _ ${ val } ` } > { val } </ li > );
return isOrdered ? < ol > { list } </ ol > : < ul > { list } </ ul > ;
};
// Usage
const names = [ 'John' , 'Paul' , 'Mary' ];
ReactDOM . createRoot ( document . getElementById ( 'root' )). render (
<>
< DataList data = { names } />
< DataList data = { names } isOrdered />
</>
);
DataTable Component
Display array data in a table format:
const DataTable = ({ data }) => {
return (
< table >
< thead >
< tr >
< th > ID </ th >
< th > Value </ th >
</ tr >
</ thead >
< tbody >
{ data . map (( val , i ) => (
< tr key = { ` ${ i } _ ${ val } ` } >
< td > { i } </ td >
< td > { val } </ td >
</ tr >
)) }
</ tbody >
</ table >
);
};
MappedTable Component
Create a dynamic table from an array of objects:
const MappedTable = ({ data , propertyNames }) => {
let filteredData = data . map ( v =>
Object . keys ( v )
. filter ( k => propertyNames . includes ( k ))
. reduce (( acc , key ) => (( acc [ key ] = v [ key ]), acc ), {})
);
return (
< table >
< thead >
< tr >
{ propertyNames . map ( val => (
< th key = { `h_ ${ val } ` } > { val } </ th >
)) }
</ tr >
</ thead >
< tbody >
{ filteredData . map (( val , i ) => (
< tr key = { `i_ ${ i } ` } >
{ propertyNames . map ( p => (
< td key = { `i_ ${ i } _ ${ p } ` } > { val [ p ] } </ td >
)) }
</ tr >
)) }
</ tbody >
</ table >
);
};
// Usage
const people = [
{ name: 'John' , surname: 'Smith' , age: 42 },
{ name: 'Adam' , surname: 'Smith' , gender: 'male' }
];
const propertyNames = [ 'name' , 'surname' , 'age' ];
ReactDOM . createRoot ( document . getElementById ( 'root' )). render (
< MappedTable data = { people } propertyNames = { propertyNames } />
);
The MappedTable component does not work with nested objects and will break if there are nested objects in the specified properties.
Feedback Components
Display contextual information on hover:
const Tooltip = ({ children , text , ... rest }) => {
const [ show , setShow ] = React . useState ( false );
return (
< div className = "tooltip-container" >
< div className = { show ? 'tooltip-box visible' : 'tooltip-box' } >
{ text }
< span className = "tooltip-arrow" />
</ div >
< div
onMouseEnter = { () => setShow ( true ) }
onMouseLeave = { () => setShow ( false ) }
{ ... rest }
>
{ children }
</ div >
</ div >
);
};
Alert Component
Show dismissible alerts with animations:
const Alert = ({ isDefaultShown = false , timeout = 250 , type , message }) => {
const [ isShown , setIsShown ] = React . useState ( isDefaultShown );
const [ isLeaving , setIsLeaving ] = React . useState ( false );
let timeoutId = null ;
React . useEffect (() => {
setIsShown ( true );
return () => {
clearTimeout ( timeoutId );
};
}, [ isDefaultShown , timeout , timeoutId ]);
const closeAlert = () => {
setIsLeaving ( true );
timeoutId = setTimeout (() => {
setIsLeaving ( false );
setIsShown ( false );
}, timeout );
};
return (
isShown && (
< div
className = { `alert ${ type } ${ isLeaving ? 'leaving' : '' } ` }
role = "alert"
>
< button className = "close" onClick = { closeAlert } />
{ message }
</ div >
)
);
};
Modal Dialog Component
Create accessible modal dialogs with keyboard support:
const Modal = ({ isVisible = false , title , content , footer , onClose }) => {
const keydownHandler = ({ key }) => {
switch ( key ) {
case 'Escape' :
onClose ();
break ;
default :
}
};
React . useEffect (() => {
document . addEventListener ( 'keydown' , keydownHandler );
return () => document . removeEventListener ( 'keydown' , keydownHandler );
});
return ! isVisible ? null : (
< div className = "modal" onClick = { onClose } >
< div className = "modal-dialog" onClick = { e => e . stopPropagation () } >
< div className = "modal-header" >
< h3 className = "modal-title" > { title } </ h3 >
< span className = "modal-close" onClick = { onClose } >
×
</ span >
</ div >
< div className = "modal-body" >
< div className = "modal-content" > { content } </ div >
</ div >
{ footer && < div className = "modal-footer" > { footer } </ div > }
</ div >
</ div >
);
};
// Usage
const App = () => {
const [ isModal , setModal ] = React . useState ( false );
return (
<>
< button onClick = { () => setModal ( true ) } > Click Here </ button >
< Modal
isVisible = { isModal }
title = "Modal Title"
content = { < p > Add your content here </ p > }
footer = { < button > Cancel </ button > }
onClose = { () => setModal ( false ) }
/>
</>
);
};
The Modal component handles ESC key presses and click-outside to close, providing a better user experience.
Component Design Patterns
Controlled Components Use state to control component values, making them predictable and testable.
Composition Build complex components by composing simpler ones, like Star and StarRating.
Props Destructuring Destructure props for cleaner code and use spread operators for flexibility.
Accessibility Include ARIA attributes and keyboard support for better accessibility.
Best Practices
State Management
Keep state as close as possible to where it’s used. Lift state up only when necessary.
Event Handlers
Use cleanup functions to remove event listeners when components unmount.
Key Props
Always provide unique, stable key props when rendering lists of components.
CSS Separation
Keep CSS separate from component logic for better maintainability.
Next Steps
View Examples See complete component implementations with styling
Learn Testing Discover how to test these components