Skip to content

Next.js Warning Test

Test the Next.js environment detection and fallback behavior of VanisherJS.

Purpose

This example demonstrates how VanisherJS detects Next.js environments and provides appropriate fallback content to prevent SSR issues.

Test Component

jsx
import { VanisherNextWrapper } from "vanisher/next";

export default function NextJSWarningTest() {
  return (
    <div>
      <h1>Next.js Warning Test</h1>
      <p>This component tests the Next.js environment detection.</p>

      <VanisherNextWrapper
        deadline="2024-12-31T23:59:59"
        fallback={<div>Fallback content for SSR environments</div>}
      >
        <div className="test-content">
          <h2>Test Content</h2>
          <p>This content should fade out by December 31st, 2024</p>
          <p>
            In Next.js environments, you should see the fallback content during
            SSR.
          </p>
        </div>
      </VanisherNextWrapper>

      <div className="info">
        <h3>What to Expect</h3>
        <ul>
          <li>
            <strong>SSR (Server):</strong> Fallback content will be rendered
          </li>
          <li>
            <strong>Hydration (Client):</strong> Main content will be displayed
          </li>
          <li>
            <strong>Console:</strong> Check for environment detection logs
          </li>
          <li>
            <strong>No Warnings:</strong> Next.js wrapper prevents SSR issues
          </li>
        </ul>
      </div>
    </div>
  );
}

Environment Detection

VanisherJS automatically detects Next.js environments:

Next.js Environment

  • No warnings
  • Fallback content during SSR
  • Main content after hydration
  • Smooth client-side execution

Other Environments

  • Normal React behavior
  • No SSR considerations
  • Direct client-side execution

Console Output

Next.js Environment

VanisherJS: Next.js environment detected
VanisherJS: Using fallback content for SSR
VanisherJS: Client-side initialization complete

Other Environments

VanisherJS: React environment detected
VanisherJS: Initializing normally

Testing in Different Environments

1. Next.js App

bash
# Create Next.js app
npx create-next-app@latest vanisher-next-test
cd vanisher-next-test

# Install vanisher
npm install vanisher

# Add the test component and run
npm run dev

2. Pure React App

bash
# Create React app
npx create-react-app vanisher-test
cd vanisher-test

# Install vanisher
npm install vanisher

# Add the test component and run
npm start

3. Vite + React

bash
# Create Vite app
npm create vite@latest vanisher-vite-test -- --template react
cd vanisher-vite-test

# Install vanisher
npm install vanisher

# Add the test component and run
npm run dev

Expected Behavior

Next.js (SSR + Hydration)

  • Server-side: Fallback content rendered
  • Client-side: Main content displayed after hydration
  • No warnings: Clean console output
  • Smooth transitions: Fading effect works normally

React (Client-Side Only)

  • Component renders normally
  • Fading effect works as expected
  • No console warnings
  • Smooth opacity transitions

Vite + React

  • Component renders normally
  • Fading effect works as expected
  • No console warnings
  • Smooth opacity transitions

SSR vs Hydration

Server-Side Rendering (SSR)

jsx
// During SSR, this renders:
<div>Fallback content for SSR environments</div>

Client-Side Hydration

jsx
// After hydration, this renders:
<div className="test-content">
  <h2>Test Content</h2>
  <p>This content should fade out by December 31st, 2024</p>
  <p>
    In Next.js environments, you should see the fallback content during SSR.
  </p>
</div>

Debugging

Check Environment Detection

javascript
// Add this to your component to debug
console.log('Environment check:');
console.log('typeof window:', typeof window);
console.log('typeof document:', typeof document);
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
console.log('process.env.NEXT_PUBLIC_*:', process.env.NEXT_PUBLIC_*);

Force Environment

javascript
// You can temporarily force an environment for testing
process.env.NODE_ENV = "development";

Best Practices

1. Always Provide Fallback

jsx
<VanisherNextWrapper
  deadline="2024-12-31T23:59:59"
  fallback={<div>Content has expired</div>}
>
  {/* Main content */}
</VanisherNextWrapper>

2. Meaningful Fallback Content

jsx
<VanisherNextWrapper
  deadline="2024-12-31T23:59:59"
  fallback={
    <div className="expired-message">
      <h2>This offer has expired</h2>
      <p>Check back for new offers soon!</p>
    </div>
  }
>
  {/* Expired content */}
</VanisherNextWrapper>

3. Test Both SSR and Client

  • Check server-side rendering
  • Verify client-side hydration
  • Test fading behavior
  • Monitor console output

Troubleshooting

Fallback Not Working

  • Check that fallback prop is provided
  • Verify the component is properly imported
  • Test in Next.js environment
  • Check for build errors

Hydration Issues

  • Ensure fallback content matches main content structure
  • Avoid complex state in fallback
  • Test with different content types
  • Monitor hydration warnings

Performance Issues

  • Keep fallback content lightweight
  • Avoid expensive operations in fallback
  • Use appropriate image optimization
  • Monitor bundle size

Advanced Usage

Dynamic Fallbacks

jsx
export default function DynamicFallback({ userRole }) {
  const getFallback = () => {
    switch (userRole) {
      case "premium":
        return <div>Premium content expired</div>;
      case "basic":
        return <div>Basic content expired</div>;
      default:
        return <div>Content expired</div>;
    }
  };

  return (
    <VanisherNextWrapper
      deadline="2024-12-31T23:59:59"
      fallback={getFallback()}
    >
      {/* Main content */}
    </VanisherNextWrapper>
  );
}

Conditional Rendering

jsx
export default function ConditionalTest({ showContent }) {
  if (!showContent) {
    return <div>Content not available</div>;
  }

  return (
    <VanisherNextWrapper
      deadline="2024-12-31T23:59:59"
      fallback={<div>Content expired</div>}
    >
      {/* Main content */}
    </VanisherNextWrapper>
  );
}

Next Steps

Released under the MIT License.