テキストエリアTextareaBeta
テキストエリア、またはテキストエリア風のコンポーネントを表示します。
プレビュー
状態とバリエーション
ラベル付き
ラベル、入力欄、補足文を同じ幅で揃えます。
文字数カウンター
残り文字数を表示し、送信前に入力制限を確認できます。
文字数カウント(組み込み)
showCount を付けるだけでカウント表示が出ます。maxLength と併用で count / max 形式に。
バリデーションエラー
エラー時は aria-invalid と destructive 色の補足文で伝えます。
無効化
編集できない理由はツールチップと補足文で説明します。
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| label | ReactNode | - | コントロール上部に表示し htmlFor で関連付けるラベルです(Select / Checkbox と同様)。 |
| description | ReactNode | - | コントロール下の補助テキストです。aria-describedby で関連付きます。 |
| showCount | boolean | false | コントロール下に文字数を表示します。maxLength と併用すると count / max 形式になり、aria-describedby で関連付きます。 |
| value / defaultValue | string | - | 入力値です。制御・非制御のどちらでも使えます。 |
| onChange | React.ChangeEventHandler<HTMLTextAreaElement> | - | 入力内容が変わった時に呼ばれます。 |
| rows | number | - | 表示する行数です。 |
| placeholder | string | - | 未入力時に表示する補助テキストです。 |
| disabled | boolean | false | 編集できない状態にします。理由はツールチップで補足します。 |
| aria-invalid | boolean | - | 入力エラー状態を支援技術と視覚表現へ伝えます。 |
使い方
import * as React from "react";
import { FormControl, FormDescription, FormGroup, FormLabel, Textarea } from "@gunjo/ui";
const LIMIT = 120;
export function MemoField() {
const [value, setValue] = React.useState("");
return (
<FormGroup className="w-full max-w-sm">
<FormLabel htmlFor="memo">メモ</FormLabel>
<FormControl>
<Textarea
id="memo"
value={value}
onChange={(event) => setValue(event.currentTarget.value)}
maxLength={LIMIT}
rows={4}
/>
</FormControl>
<FormDescription>複数行の説明や補足を入力できます。</FormDescription>
</FormGroup>
);
}設計の判断(UIXHERO)
「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。