Skip to content

Fix React Hook useEffect has a missing dependency #1

Open
@TerryBerk

Description

Hello!

Firstly, I want to thank you for your project, it helped me a lot with HDRi maps and glTF interaction.
Secondly, I can help you with fixing the errors in the highlighted linter, marked as React Hook useEffect has a missing dependency. Below is a fix for Environment.js:

import * as THREE from 'three'
import { useEffect } from 'react'
import { useThree, useLoader } from 'react-three-fiber'
import { HDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader'

export default function Environment({ background = false }) {
  const { gl, scene } = useThree()
  const [cubeMap] = useLoader(HDRCubeTextureLoader, [['px.hdr', 'nx.hdr', 'py.hdr', 'ny.hdr', 'pz.hdr', 'nz.hdr']], loader => {
    loader.setDataType(THREE.UnsignedByteType)
    loader.setPath('hdr/')
  })
  useEffect(() => {
    const gen = new THREE.PMREMGenerator(gl)
    gen.compileEquirectangularShader()
    const hdrCubeRenderTarget = gen.fromCubemap(cubeMap)
    cubeMap.dispose()
    gen.dispose()
    // if (background) scene.background = hdrCubeRenderTarget.texture
    scene.environment = hdrCubeRenderTarget.texture
    // scene.background.convertSRGBToLinear()
    return () => (scene.environment = null)
  }, [cubeMap, gl, scene])
  return null
}

If you are interested, here's an article that helped me refact this error:
https://reacttraining.com/blog/when-to-use-functions-in-hooks-dependency-array/

By analogy, you can correct that mistake anywhere.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions