Reactjs/Threejs

[React / Three] useRef / useEffect / useFrame

Watertight 2023. 1. 16. 06:27

1. useRef

구성 요소 인스턴스의 속성을 읽거나 수정하려는 경우, 해당 인스턴스에 대한 참조를 가져올때 사용한다.

 

2. useEffect

구성 요소가 렌더링 후 작업을 수행해야 함을 React에 다시 알린다. 여기에서는 Three.js 객체로 변환하고 그 속성을 다시 가져와 로직을 수행하도록 한다. -> Three.js 객체 정보를 이용할때 useRef와 함께 사용

import { useRef, useEffect } from 'react'

export default function Box(props) {
  const ref = useRef()

  useEffect(() => {
    console.log(ref.current)
  })

  return (
    <mesh {...props} ref={ref}>
      <boxGeometry />
      <meshBasicMaterial color={0x00ff00} wireframe />
    </mesh>
  )
}

 

3. useFrame

매 렌더링된 프레임 전에 코드를 실행할때 유용한, React Three Fiber hook이다. 아래는 JSX가 Three.js 객체로 변환된 후 현재 프레임이 캔버스에 렌더링 직전에 호출된다.

import { useRef } from 'react'
import { useFrame } from '@react-three/fiber'

export default function Box(props) {
  const ref = useRef()

  useFrame((_, delta) => {
    ref.current.rotation.x += 1 * delta
    ref.current.rotation.y += 0.5 * delta
  })

  return (
    <mesh {...props} ref={ref}>
      <boxGeometry />
      <meshBasicMaterial color={0x00ff00} wireframe />
    </mesh>
  )
}