AutoSkill 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.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/configure_react_globe_nextjs_lifecycle" ~/.claude/skills/ecnu-icalk-autoskill-configure-react-globe-nextjs-lifecycle && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/configure_react_globe_nextjs_lifecycle/SKILL.md
source content

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