1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsの「"use client"」「"use server"」とは?使い方をまとめてみた

Posted at

Next.jsで「use client」と「use server」を使い分けることで、効率的にアプリケーションを構築することができます。それぞれの役割と使い方を整理し、Reactフックを使う際の注意点についてまとめてみました。

1. "use client"

use clientは、クライアントサイドで実行する必要があるコンポーネントに指定します。この指示を使うことで、ユーザーのインタラクションが可能なコンポーネントを構築できます。

主な特徴と役割

useStateなどの多くのReactフックは、use client指定のコンポーネント内でのみ利用可能です。
クライアントサイドで実行が必要なReactフック

useState: 状態管理のためのフックで、クライアント側での実行が前提。

useReducer: useState同様。

useEffect: DOM操作やAPIリクエストなどの副作用を処理。サーバーサイドにはDOMがないため、クライアントサイドでのみ利用。

useRef: DOM要素への参照やレンダリング間で変わらない値の保持。DOMがクライアント側でのみ利用可能なため。

useLayoutEffect: DOMの変更がレイアウトに与える影響を処理するフック。DOMのレンダリング直前に呼び出され、サーバー側では効果がないため、クライアントサイドでのみ使用。

使い方

クライアントサイド専用コンポーネントでは、ファイルの最初に"use client"と記述します。これにより、クライアントサイドで実行されるコンポーネントとしてマークされます。

React
// ファイルの最初に "use client" を記述
"use client";

import { useState, useEffect, useRef, useReducer, useLayoutEffect } from 'react';

function MyComponent() {
  const [state, setState] = useState(0);
  const ref = useRef(null);

  useEffect(() => {
    // 副作用の処理
  }, []);

  return (
    <div ref={ref}>
      <p>State: {state}</p>
      <button onClick={() => setState(state + 1)}>Increase</button>
    </div>
  );
}

export default MyComponent;

2. 「"use server"」

非同期関数内の冒頭に**"use server"**を追加することで、クライアントから実行可能であることをマークできます。
このような関数をサーバーアクション(Server Action)と呼ばれます。

React
// 以下サーバーアクション
async function example(data) {
  'use server';
  // 関数本体...
}

関数すべてにuse serverを指定する代わりに、ファイル冒頭に指定することもできます。
その場合は、そのファイル内のすべての関数がサーバーアクションとしてマークされます。
※非同期関数のみしか指定できない。

まとめ

エラーがでたからuse clientを追加するのはやめて、なぜ必要なのか理解してよりよい開発をしていきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?