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.From its SKILL.md
npx -y skills add ECNU-ICALK/AutoSkill --skill configure_react_globe_nextjs_lifecycleAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
4.8 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
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
-
Initialization Guard:
- To prevent multiple initializations during Fast Refresh or complex navigation, use a
useRefflag (e.g.,isInitialized). - Check
if (isInitialized.current) return;at the start of theuseEffect. - Set
isInitialized.current = true;after initialization logic.
- To prevent multiple initializations during Fast Refresh or complex navigation, use a
-
Next.js Route Handling:
- Use
useRouterfromnext/router. - Implement a
useEffecthook that listens torouter.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
keyprop (e.g., a timestamp) to the Globe component from the parent. - Clean up the event listener in the
useEffectreturn function.
- Use
-
Globe Instance Access:
- Use
useRefto create a reference for the Globe component (e.g.,globeRef). - Attach this ref to the
Globecomponent'srefprop.
- Use
-
Custom Rotation:
- Use the ref to call imperative rotation methods (e.g.,
globeRef.current.rotateX(...),globeRef.current.rotateY(...)). - Execute these inside a
useEffector theonGlobeReadycallback, ensuring the ref is current.
- Use the ref to call imperative rotation methods (e.g.,
-
Material Customization:
- Import
Colorfromthree. - 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.
- Import
-
Resource Cleanup:
- Always remove event listeners in the
useEffectcleanup 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.glunless you are manually implementing the renderer.
- Always remove event listeners in the
-
Background Transparency:
- Set the
backgroundColorprop of the Globe component to"rgba(0, 0, 0, 0)".
- Set the
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
useEffectdependency array to prevent double execution in development environments with Fast Refresh. - Do not use
globeMaterial()orgetGlobeMaterial()if they are not supported by the specific library version; prefer traversing the scene or using props if direct access fails.
Interaction Workflow
- Initialize state for
arcsDataand refs (globeRef,isInitialized). - Set up router event listeners in
useEffectwith cleanup. - Configure the Globe component with the ref, necessary props (
backgroundColor,arcsData), and a dynamickeyif remounting is required. - Apply rotation and material customizations in a separate
useEffectdependent on the ref, guarded byisInitialized.
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
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.