5
3

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のuseClientとは?

Last updated at Posted at 2024-07-01

use clientとは

クライアントサイドで動作する必要があるコンポーネントを指定するために使います。
これにより、クライアントサイドでのインタラクティブな操作が可能になります。

  • 補足(インタラクティブとは)

1.React Hooks関数コンポーネントで状態管理やライフサイクルイベントを扱うための機能で、useStateやuseEffectなどです。

2.イベントハンドラー
イベントハンドラーは、ユーザーの操(クリック、入力、フォームの送信など)に応じて特定の処理を実行するための関数)
です。

小学生にもわかるように解説

家でゲームをしていて、ゲーム機がある部屋(サーバールーム)と、ゲームをしている部屋(クライアントルーム)があります。

  • サーバールーム(Server Room)
    ここにはたくさんのデータやゲームのルールが保存。
    部屋の中の人(プログラム)は、色々な準備をして、データをクライアントルームに送ります。

  • クライアントルーム(Client Room)
    ここで実際にゲームを遊びます。
    ゲーム機やコントローラーがあり、ボタンを押したり、キャラクターを動かしたりします。

ゲームの準備ができたら、データをクライアントルームに送り、
クライアントルームで、あなたがゲーム機のボタンを押したりしてプレイします。

use clientは、「この部分はクライアントルームで遊ぶためのものだよ!」と教えてあげるラベルのようなものです。

例えば、あなたがボタンを押すとキャラクターがジャンプするプログラムがあります。このプログラムは、クライアントルームで動かさないといけません。そこで、「use client」と書いておくと、「このプログラムはクライアントルームで動かすよ!」とわかるようになります。

実際の例

ログインページではuseclientを使いました。

src/app/login/page.tsx
"use client"

import { Input } from "../../components//atoms/Input";
import { PrimaryBtn } from "../../components/atoms/PrimaryBtn";

export const Login = () => {
  return (
    <div className="w-[500px] bg-white rounded-lg shadow-lg py-10">
      <form className="flex flex-col justify-center items-center gap-10">
        <h1 className="text-3xl text-lime-800 font-bold text-center">
          ログイン
        </h1>
        <div className="w-[80%]">
          <Input
            type="text"
            placeholder="email"
          />
        </div>
        <div className="w-[80%]">
          <Input
            type="password"
            placeholder="password"
          />
        </div>
        <PrimaryBtn onClick={() => null}>ログイン</PrimaryBtn>
      </form>
    </div>
  );
};

export default Login;

ボタンに関するコンポーネントでも使いました。

src/components/atoms/PrimaryBtn.tsx
"use client"

import { ReactNode } from 'react'

type PropsType = {
    onClick: () => void
    children:ReactNode
} 

export const PrimaryBtn = ({ onClick,children }: PropsType) => {
  return (
    <button className="bg-lime-800 text-white p-4 text-lg rounded-lg" onClick={onClick}>
      { children }
    </button>
  )
}

export default PrimaryBtn

使用ケース

調べたら以下のケースでよく使われるみたいです。
1.認証
認証関連の機能は、ユーザーの入力、セッション管理、API呼び出しなど、クライアントサイドで処理する必要がある時

ex)
ログインフォームやユーザープロフィールの編集など

2.フォームの入力とバリデーション
ユーザーが入力するフォームは、クライアントサイドでのインタラクティブな操作が必要

ex)
入力値のバリデーションや動的なフィードバックを行う場合

3.状態管理
コンポーネント内部で状態を持つ時(ex useStateやuseReducerを使う時)

4.イベントハンドリング
クリックイベントやフォームの送信など、ユーザーの操作に応じて処理をする時

注意

Reactではuse clientは使いません
理由はReactには、SSRの仕組みなどがないからです。

資料

ChaGpt参照

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?