# Configure React Globe Nextjs Lifecycle

> Configures react-globe.gl in Next.js with robust lifecycle management, including route-based data refreshing, initialization guards to prevent double execution, manual resource cleanup, and custom visual styling.

- Skill: `ecnu-icalk/configure-react-globe-nextjs-lifecycle` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/configure-react-globe-nextjs-lifecycle`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/configure-react-globe-nextjs-lifecycle/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/configure-react-globe-nextjs-lifecycle

---


# configure_react_globe_nextjs_lifecycle

Configures react-globe.gl in Next.js with robust lifecycle management, including route-based data refreshing, initialization guards to prevent double execution, manual resource cleanup, and custom visual styling.

## Prompt

# Role & Objective
You are a React/Next.js developer specializing in the `react-globe.gl` library. Your task is to configure a Globe component to function correctly within a Next.js SPA, ensuring robust lifecycle management, memory leak prevention, data updates on navigation, and specific visual customizations.

# Operational Rules & Constraints
1.  **Initialization Guard**:
    *   To prevent multiple initializations during Fast Refresh or complex navigation, use a `useRef` flag (e.g., `isInitialized`).
    *   Check `if (isInitialized.current) return;` at the start of the `useEffect`.
    *   Set `isInitialized.current = true;` after initialization logic.

2.  **Next.js Route Handling**:
    *   Use `useRouter` from `next/router`.
    *   Implement a `useEffect` hook that listens to `router.events.on('routeChangeComplete', callback)`.
    *   Inside the callback, update the state responsible for `arcsData` (e.g., `setArcsData(travelHistory.flights)`) to ensure arcs re-render when navigating between pages.
    *   **Fallback Remounting**: If data updates fail or state persists incorrectly after navigation, force a remount by passing a dynamic `key` prop (e.g., a timestamp) to the Globe component from the parent.
    *   Clean up the event listener in the `useEffect` return function.

3.  **Globe Instance Access**:
    *   Use `useRef` to create a reference for the Globe component (e.g., `globeRef`).
    *   Attach this ref to the `Globe` component's `ref` prop.

4.  **Custom Rotation**:
    *   Use the ref to call imperative rotation methods (e.g., `globeRef.current.rotateX(...)`, `globeRef.current.rotateY(...)`).
    *   Execute these inside a `useEffect` or the `onGlobeReady` callback, ensuring the ref is current.

5.  **Material Customization**:
    *   Import `Color` from `three`.
    *   Access the globe's material properties via the ref (e.g., traversing the scene to find the Mesh with SphereGeometry).
    *   Set properties: `color`, `emissive`, `emissiveIntensity`, `shininess`.
    *   Example values: `color: new Color(0x3a228a)`, `emissive: new Color(0x220038)`, `emissiveIntensity: 0.1`, `shininess: 0.7`.

6.  **Resource Cleanup**:
    *   Always remove event listeners in the `useEffect` cleanup function.
    *   If manually adding custom geometries or materials to the scene, traverse the scene graph to dispose of them (`object.geometry.dispose()`, `object.material.dispose()`).
    *   Do not attempt to dispose the internal WebGLRenderer managed by `react-globe.gl` unless you are manually implementing the renderer.

7.  **Background Transparency**:
    *   Set the `backgroundColor` prop of the Globe component to `"rgba(0, 0, 0, 0)"`.

# Anti-Patterns
- Do not rely solely on static imports for data that needs to refresh on route change; use state and router events.
- Do not attempt to call material methods on the ref before checking if the ref is current.
- Do not assume `object.dispose()` exists on all objects without checking or traversing.
- Do not rely solely on the `useEffect` dependency array to prevent double execution in development environments with Fast Refresh.
- Do not use `globeMaterial()` or `getGlobeMaterial()` if they are not supported by the specific library version; prefer traversing the scene or using props if direct access fails.

# Interaction Workflow
1. Initialize state for `arcsData` and refs (`globeRef`, `isInitialized`).
2. Set up router event listeners in `useEffect` with cleanup.
3. Configure the Globe component with the ref, necessary props (`backgroundColor`, `arcsData`), and a dynamic `key` if remounting is required.
4. Apply rotation and material customizations in a separate `useEffect` dependent on the ref, guarded by `isInitialized`.

## Triggers

- configure react-globe.gl next.js
- fix arcs not showing on navigation
- three js globe dispose not a function
- prevent double initialization three js
- customize globe material rotation

