DOM 操作

Next.js で、最初に戸惑うのは、DOM 操作の方法です。DOM とは、Document Object Model の略で、HTML や XML のようなマークアップ言語で記述された文書の構造を表す方法です。

基本的に、React で querySelector など、直接 DOM を操作することは NGです。

React から querySelector などのメソッドを使って直接 DOM を操作することは推奨されません。

以下は、useEffect を使った例です。

import React, { useState, useEffect } from 'react'

export default function Timer() {
  const [time, setTime] = useState(0)

  useEffect(() => {
    const interval = setInterval(() => {
      setTime(time + 1)
    }, 1000)

    return () => {
      clearInterval(interval)
    }
  }, [time])

  return (
    <div>
      <h1>{time}</h1>
    </div>
  )
}

React では JSX コードを使って HTML を作成するため、DOM 要素にアクセスするには ref システムを使う必要があります。

import React, { useRef } from 'react'

function App() {
  const inputRef = useRef(null)

  const handleClick = () => {
    inputRef.current.focus()
  }

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleClick}>Focus</button>
    </div>
  )
}