@wordpress/element package provides a React abstraction layer for WordPress, re-exporting React components and hooks with WordPress-specific enhancements.
Installation
Why Use @wordpress/element?
This package:- Provides consistent React imports across WordPress
- Adds WordPress-specific utilities
- Simplifies React version management
- Ensures compatibility with WordPress core
Basic Usage
React Hooks
All standard React hooks are available:useState
useEffect
useContext
useRef
useMemo
useCallback
Components
Fragment
Render multiple elements without a wrapper.StrictMode
Enables additional checks and warnings.Suspense
Handles loading states for lazy components.WordPress-Specific Components
RawHTML
Renders unescaped HTML safely.Platform
Detects the current platform.String Utilities
createInterpolateElement
Creates elements from interpolated strings.concatChildren
Concatenates multiple children arrays.switchChildrenNodeName
Changes the element type of children.Element Creation
createElement
Creates React elements.cloneElement
Clones an element with new props.Refs
createRef
Creates a ref object.forwardRef
Forwards refs to child components.Rendering
createRoot (React 18)
Creates a root for rendering.hydrateRoot (React 18)
Hydrates server-rendered markup.render (Legacy)
Class Components
Component
Base class for components.PureComponent
Component with shallow prop/state comparison.Portals
createPortal
Renders children into a different DOM node.Context
createContext
Creates a context object.Advanced Hooks
useLayoutEffect
Runs synchronously after DOM mutations.useImperativeHandle
Customizes ref value.Utilities
isValidElement
Checks if a value is a valid React element.isEmptyElement
Checks if an element is empty.Children
Utilities for working with children.Best Practices
- Always use @wordpress/element - Don’t import React directly
- Prefer hooks - Use function components with hooks over classes
- Memoize expensive operations - Use useMemo and useCallback
- Follow React patterns - Element behaves like standard React
- Handle errors - Use error boundaries for production code