Nickname
사용자용 컴포넌트서비스를 쓰는 일반 사용자가 보는 화면에 쓰입니다.
닉네임 입력, 자동 생성 버튼, 마이페이지에서의 닉네임 변경입니다.
이름과 별개로 다른 사용자에게 보여 주는 닉네임을 입력받고 바꾸는 컴포넌트입니다. 가입 폼에서는 [자동 생성] 버튼으로 이름을 받아 쓰거나 처음부터 채워 둘 수 있고, 마이페이지에서는 한 줄 편집기로 바꿀 수 있습니다. 닉네임은 선택 기능이라 기본은 꺼져 있습니다.
Turn it on
meerkit.config.ts
export default defineMeerkitConfig({
signup: {
optionalFields: ["nickname"], // 켜기
nickname: {
generator: true, // [자동 생성] 버튼 (기본 true)
autoFill: false, // 가입 폼을 열 때 닉네임을 미리 채워 둠 (기본 false)
},
},
});| 설정 | 기본값 | 동작 |
|---|---|---|
optionalFields: ["nickname"] | 꺼짐 | 가입 폼과 마이페이지에 닉네임이 나타납니다. |
nickname.generator | true | 입력칸 옆에 [자동 생성] 버튼을 보여 줍니다. |
nickname.autoFill | false | 가입 폼을 열 때 자동 생성한 닉네임을 미리 넣어 둡니다. 사용자는 그대로 쓰거나 고칠 수 있습니다. |
Input with generator
[자동 생성]을 누를 때마다 새로운 닉네임이 입력칸에 들어갑니다. 직접 입력해도 됩니다.
tsx
<NicknameInput
id="nickname"
value={value}
onChange={setValue}
generator
/>생성 규칙
- 형용사 + 동물 + 숫자 3자리를 이어 붙입니다. 예:
용감한미어캣482,포근한수달731. - 길이는 항상 2~12자 안에 들어오도록 단어를 골라 두었습니다.
- 단어 목록은
auth/nickname.ts에 있어서 서비스 분위기에 맞게 바꿀 수 있습니다. - 중복은 서버가 판단합니다. 숫자가 붙어 겹칠 가능성이 낮지만, 같은 닉네임이 이미 있으면 서버가 거절하고 화면이 그 메시지를 보여 줍니다. 다시 [자동 생성]을 누르면 됩니다.
On signup
- 가입 폼의 닉네임 칸에 [자동 생성] 버튼이 붙습니다. 비워 두어도 되는 선택 항목입니다.
autoFill: true이면 폼을 열 때 닉네임이 이미 채워져 있어, 사용자는 따로 고민하지 않고 가입할 수 있습니다.- 값이 있으면 2~12자인지 검사하고, 맞지 않으면
닉네임은 2~12자로 입력해 주세요.를 보여 줍니다.
On my page
마이페이지(/me)의 요약 카드 안에 있는 한 줄 편집기입니다. 변경을 누르면 입력칸으로 바뀝니다.
닉네임
미어캣왕
tsx
<NicknameForm
user={user}
onSubmit={(nickname) => updateNickname.mutateAsync(nickname)}
pending={updateNickname.isPending}
error={message}
/>| 동작 | 화면 |
|---|---|
| [변경] 클릭 | 현재 닉네임이 들어 있는 입력칸과 [자동 생성], [저장], [취소]로 바뀝니다. |
| 값을 바꾸지 않음 | [저장]이 잠겨 있습니다. |
| 2~12자가 아님 | 닉네임은 2~12자로 입력해 주세요. |
| 비우고 저장 | 닉네임이 지워지고 이름이 다시 표시됩니다. |
| 서버가 거절 (중복 등) | 편집 창이 닫히지 않고 입력한 값을 그대로 둔 채 서버의 detail 메시지를 입력칸 아래에 표시합니다. (미리보기에서 "중복"을 입력해 보세요) |
| 저장 성공 | "닉네임을 저장했습니다." 토스트와 함께 화면의 이름이 즉시 바뀝니다. |
Where it shows
닉네임이 있으면 이름 대신 닉네임이 보이고, 없으면 이름이 보입니다.
- 사용자 메뉴의 버튼과 머리말, 마이페이지 제목, 관리자 멤버 표의 이름 칸
- 아바타의 이니셜(프로필 이미지가 없을 때)
- 내 서비스에서도
displayName(user)를 쓰면 같은 규칙으로 표시됩니다.
tsx
import { displayName } from "@/meerkit/auth/components/UserAvatar";
<p>{displayName(user)}</p> // 닉네임이 있으면 닉네임, 없으면 이름API
PATCH /users/me
// request (바꿀 항목만)
{ "nickname": "용감한미어캣482" }
// response 200 → 갱신된 User
// 409 { "detail": "이미 사용 중인 닉네임입니다." }서버는 닉네임의 길이(2~12자)와 중복을 반드시 다시 검사하고, 서비스 정책에 따라 사용할 수 없는 단어(욕설 등)를 막으세요. 가입 때 보낸 닉네임도 같은 규칙으로 확인해야 합니다.
Props
NicknameInput
| Prop | Type | 설명 |
|---|---|---|
id필수 | string | 입력창 id. 라벨의 htmlFor와 연결합니다. |
value필수 | string | 현재 값. |
onChange필수 | (value: string) => void | 직접 입력하거나 자동 생성하면 새 값을 전달합니다. |
generator | boolean | [자동 생성] 버튼 표시. 기본 true. |
placeholder | string | 안내 문구. |
disabled | boolean | 잠금. |
NicknameForm
| Prop | Type | 설명 |
|---|---|---|
user필수 | { nickname?: string | null } | 현재 닉네임을 가진 사용자. |
onSubmit필수 | (nickname: string) => void | Promise | [저장]을 누르면 새 닉네임을 전달합니다. 빈 문자열이면 지우기입니다. Promise를 돌려주면 성공했을 때만 편집 창이 닫히고, 실패하면 열어 둔 채 오류를 보여 줍니다. |
pending | boolean | 요청 중이면 버튼을 잠급니다. |
error | string | null | 서버 오류 메시지. |
generator | boolean | [자동 생성] 버튼 표시. 기본 true. |
Related API
이 컴포넌트가 호출하는 API입니다. 누르면 요청·응답 명세로 이동합니다.
