Dynamic Conditional Rendering in the Next.js Supabase SaaS kit
Learn how to use the If component in the Next.js Supabase SaaS kit
The If
component is a utility component for conditional rendering in React applications. It provides a clean, declarative way to render content based on a condition, with support for fallback content.
Features
- Conditional rendering based on various types of conditions
- Support for render props pattern
- Optional fallback content
- Memoized for performance optimization
Usage
import { If } from '@kit/ui/if';function MyComponent({ isLoggedIn, user }) { return ( <If condition={isLoggedIn} fallback={<LoginPrompt />}> {(value) => <WelcomeMessage user={user} />} </If> );}
Props
The If
component accepts the following props:
condition: Condition<Value>
(required): The condition to evaluate. Can be any value, where falsy values (false
,null
,undefined
,0
,''
) are considered false.children: React.ReactNode | ((value: Value) => React.ReactNode)
(required): The content to render when the condition is truthy. Can be a React node or a function (render prop).fallback?: React.ReactNode
(optional): Content to render when the condition is falsy.
Types
type Condition<Value = unknown> = Value | false | null | undefined | 0 | '';
Examples
Basic usage
<If condition={isLoading}> <LoadingSpinner /></If>
With fallback
<If condition={hasData} fallback={<NoDataMessage />}> <DataDisplay data={data} /></If>
Using render props
<If condition={user}> {(user) => <UserProfile username={user.name} />}</If>
Performance
The If
component uses useMemo
to optimize performance by memoizing the rendered output. This means it will only re-render when the condition
, children
, or fallback
props change.
Best Practices
- Use the
If
component for simple conditional rendering to improve readability. - Leverage the render props pattern when you need to use the condition's value in the rendered content.
- Provide a fallback for better user experience when the condition is false.
- Remember that the condition is re-evaluated on every render, so keep it simple to avoid unnecessary computations.
Typescript Support
The If
component is fully typed and supports generic types for the condition value. This allows for type-safe usage of the render props pattern:
<If<User> condition={user}> {(user) => <UserProfile name={user.name} email={user.email} />}</If>
The If
component provides a clean and efficient way to handle conditional rendering in React applications, improving code readability and maintainability.