Lifting state enables component communication through a common ancestor. Here's how to do it effectively.
Basic State Lifting#
Sibling Communication#
Form State Lifting#
Controlled vs Uncontrolled#
Callback Patterns#
Avoiding Prop Drilling#
State Colocation#
Best Practices#
When to Lift State:
✓ Multiple components need the same data
✓ Sibling components need to communicate
✓ Parent needs to coordinate children
✓ Data needs to be synchronized
When NOT to Lift:
✓ Only one component uses the state
✓ State is purely UI (hover, focus)
✓ Component is self-contained
✓ Would cause prop drilling
Patterns:
✓ Keep state as low as possible
✓ Lift only when necessary
✓ Use callbacks for upward communication
✓ Use composition to avoid drilling
Performance:
✓ Memoize callbacks with useCallback
✓ Split state to minimize re-renders
✓ Consider Context for deep trees
✓ Use React.memo strategically
Conclusion#
State lifting is fundamental to React's data flow. Lift state to the lowest common ancestor that needs it, use callbacks for child-to-parent communication, and consider composition patterns to avoid prop drilling. For deeply nested state, consider Context or state management libraries.