入力 / フォーム要素 React コンポーネント

フォーム要素を使用すると、柔軟で美しいフォームレイアウトを作成できます。フォーム要素は、よく知られたリストビューリストリストアイテム React コンポーネント)ですが、いくつかの追加コンポーネントがあります。

Framework7 の 入力 / フォーム要素 を参照して、外観を確認してください。

入力コンポーネント

次のコンポーネントが含まれています

入力プロパティ

プロパティデフォルト説明
<ListInput> プロパティ
media文字列リストアイテムメディア画像のURL
label文字列入力のラベルテキスト
floatingLabelブール値falseフローティングラベルを有効にします
outlineブール値false入力にアウトラインを付けます
inputブール値true入力要素をレンダリングするかどうか。カスタム入力を使用する場合は無効にします。
type文字列入力の種類。すべてのデフォルトのHTML5入力タイプと、いくつかの特別なタイプ
  • textarea - テキストエリア要素をレンダリングします
  • select - セレクト要素をレンダリングします
  • datepicker - 入力フォーカス時にカレンダーを開きます
  • colorpicker - 入力フォーカス時にカラーピッカーを開きます
  • texteditor - 入力フォーカス時にテキストエディターを開きます
resizableブール値falseテキストエリアをサイズ変更可能にします
inputStyleオブジェクト追加のスタイルを渡す必要がある場合の入力の "style" 属性の値
clearButtonブール値falseクリック時に入力値をクリアする入力クリアボタンを追加します
validateブール値false有効にすると、渡された「pattern」に基づいて、または入力タイプに基づいて、変更時に入力値が検証されます。カスタム検証を使用し、エラーメッセージの表示/非表示をより細かく制御する必要がある場合は、検証を無効にしてerror-messageerror-message-forceプロパティを一緒に使用することをお勧めします。
validateOnBlurブール値false有効にすると、入力はフォーカスが外れたときのみ検証されます。
onValidate関数入力検証時に実行されるコールバック。入力が有効かどうかを示すブール値を返します。
<ListInput
  type="email"
  validate
  :onValidate={(isValid) => setInputValid(isValid)}
/>
errorMessage文字列入力値が無効な場合に表示するカスタムエラーメッセージ
errorMessageForceブール値false強制的にエラーメッセージを表示します。カスタム検証を使用し、必要に応じてエラーメッセージの表示/非表示を切り替えたい場合に役立ちます
info文字列入力に関する追加情報を表示するカスタムテキスト
name文字列入力名
placeholder文字列入力プレースホルダー
id文字列ラッピング要素のID属性
inputId文字列入力要素のID属性
value文字列
数値

入力値。

type="datepicker"の場合、値はカレンダーが受け入れるものとして渡す必要があります。たとえば、日付を含む配列value={[new Date()]}

type="colorpicker"の場合、値はカラーピッカーが受け入れるものとして渡す必要があります。たとえば、カラーを含むオブジェクトvalue={{hex: '#ff0000'}}

type="texteditor"の場合、値はHTML文字列である必要があります

defaultValue文字列
数値
制御されていないコンポーネントの場合の入力値
inputmode文字列入力のネイティブな "inputmode" 属性の値
size文字列
数値
入力のネイティブな "size" 属性の値
pattern文字列入力のネイティブな "pattern" 属性の値
accept文字列
数値
入力のネイティブな "accept" 属性の値
autocomplete文字列入力のネイティブな "autocomplete" 属性の値
autofocusブール値false入力のネイティブな "autofocus" 属性の値
autosave文字列入力のネイティブな "autosave" 属性の値
disabledブール値false入力を無効としてマークします
max文字列
数値
入力のネイティブな "max" 属性の値
min文字列
数値
入力のネイティブな "min" 属性の値
step文字列
数値
入力のネイティブな "step" 属性の値
maxlength文字列
数値
入力のネイティブな "maxlength" 属性の値
minlength文字列
数値
入力のネイティブな "minlength" 属性の値
multipleブール値false入力のネイティブな "multiple" 属性の値
readonlyブール値false入力を読み取り専用としてマークします
requiredブール値false入力を必須としてマークします
tabindex文字列
数値
入力のネイティブな "tabindex" 属性の値
noStoreDataブール値falseフォームストレージで使用する場合、入力値の保存を無視できます
ignoreStoreDataブール値false上記と同じ
wrapブール値true有効にすると、<li>要素でラップされます
calendarParamsオブジェクトtype="datepicker"で使用されるカレンダーパラメーターを含むオブジェクト
colorPickerParamsオブジェクトtype="colorpicker"で使用されるカラーピッカーパラメーターを含むオブジェクト
textEditorParamsオブジェクトtype="texteditor"で使用されるテキストエディターパラメーターを含むオブジェクト
<Input> プロパティ
outlineブール値false入力にアウトラインを付けます
wrapブール値true入力を<div class="input">要素でラップするかどうかを定義します。
type文字列入力の種類。すべてのデフォルトのHTML5入力タイプと、いくつかの特別なタイプ
  • textarea - テキストエリア要素をレンダリングします
  • select - セレクト要素をレンダリングします
  • datepicker - 入力フォーカス時にカレンダーを開きます
  • colorpicker - 入力フォーカス時にカラーピッカーを開きます
  • texteditor - 入力フォーカス時にテキストエディターを開きます
resizableブール値falseテキストエリアをサイズ変更可能にします
inputStyleオブジェクト追加のスタイルを渡す必要がある場合の入力の "style" 属性の値
clearButtonブール値falseクリック時に入力値をクリアする入力クリアボタンを追加します
validateブール値false有効にすると、渡された「pattern」に基づいて、または入力タイプに基づいて、変更時に入力値が検証されます。カスタム検証を使用し、エラーメッセージの表示/非表示をより細かく制御する必要がある場合は、検証を無効にしてerror-messageerror-message-forceプロパティを一緒に使用することをお勧めします。
validateOnBlurブール値false有効にすると、入力はフォーカスが外れたときのみ検証されます。
onValidate関数入力検証時に実行されるコールバック。入力が有効かどうかを示すブール値を返します。
<Input
  type="email"
  validate
  :onValidate={(isValid) => setInputValid(isValid)}
/>
errorMessage文字列入力値が無効な場合に表示するカスタムエラーメッセージ
errorMessageForceブール値false強制的にエラーメッセージを表示します。カスタム検証を使用し、必要に応じてエラーメッセージの表示/非表示を切り替えたい場合に役立ちます
info文字列入力に関する追加情報を表示するカスタムテキスト
name文字列入力名
placeholder文字列入力プレースホルダー
id文字列ラッピング要素のID属性
inputId文字列入力要素のID属性
value文字列
数値

入力値。

type="datepicker"の場合、値はカレンダーが受け入れるものとして渡す必要があります。たとえば、日付を含む配列value={[new Date()]}

type="colorpicker"の場合、値はカラーピッカーが受け入れるものとして渡す必要があります。たとえば、カラーを含むオブジェクトvalue={{hex: '#ff0000'}}

type="texteditor"の場合、値はHTML文字列である必要があります

defaultValue文字列
数値
制御されていないコンポーネントの場合の入力値
inputmode文字列入力のネイティブな "inputmode" 属性の値
size文字列
数値
入力のネイティブな "size" 属性の値
pattern文字列入力のネイティブな "pattern" 属性の値
accept文字列
数値
入力のネイティブな "accept" 属性の値
autocomplete文字列入力のネイティブな "autocomplete" 属性の値
autofocusブール値false入力のネイティブな "autofocus" 属性の値
autosave文字列入力のネイティブな "autosave" 属性の値
checkedブール値false入力をチェック済みとしてマークします
disabledブール値false入力を無効としてマークします
max文字列
数値
入力のネイティブな "max" 属性の値
min文字列
数値
入力のネイティブな "min" 属性の値
step文字列
数値
入力のネイティブな "step" 属性の値
maxlength文字列
数値
入力のネイティブな "maxlength" 属性の値
minlength文字列
数値
入力のネイティブな "minlength" 属性の値
multipleブール値false入力のネイティブな "multiple" 属性の値
readonlyブール値false入力を読み取り専用としてマークします
requiredブール値false入力を必須としてマークします
tabindex文字列
数値
入力のネイティブな "tabindex" 属性の値
noStoreDataブール値falseフォームストレージで使用する場合、入力値の保存を無視できます
ignoreStoreDataブール値false上記と同じ
calendarParamsオブジェクトtype="datepicker"で使用されるカレンダーパラメーターを含むオブジェクト
colorPickerParamsオブジェクトtype="colorpicker"で使用されるカラーピッカーパラメーターを含むオブジェクト
textEditorParamsオブジェクトtype="texteditor"で使用されるテキストエディターパラメーターを含むオブジェクト

入力イベント

イベント引数説明
<ListInput>、<Input> イベント
focus(event)ユーザーが入力にフォーカスしたときに発生します。
blur(event)ユーザーが入力からフォーカスを外したときに発生します。
input(event)入力値が変更された直後に発生します。注:入力イベントは、beforeinput、keypress、keyup、keydownイベントの後にトリガーされます。
change(event)値が変更された場合、フォーカスが外れたときに発生します。
inputClear(event)入力クリアボタンがクリックされたときに発生します
textareaResize(event)サイズ変更可能なテキストエリアのサイズが変更された場合に発生します。event.detailには、initialHeightcurrentHeightscrollHeightプロパティを含むオブジェクトが含まれます
inputEmpty(event)入力値が空になったときに発生します
inputNotEmpty(event)入力値が空ではなくなったときに発生します
calendarChange(value)type="datepicker"カレンダーの値が変更されたときに発生します。引数として、選択された日付を含む配列を受け取ります。
colorPickerChange(value)type="colorpicker"カラーピッカーの値が変更されたときに発生します。引数として、カラーピッカーの値を含むオブジェクトを受け取ります。
textEditorChange(value)type="texteditor"テキストエディターの値が変更されたときに発生します。引数として、テキストエディターの値(HTML文字列)を受け取ります。

入力スロット

<ListInput>には、カスタム要素用の追加スロットがあります

inputs.jsx
import React from 'react';
import { Navbar, Page, BlockTitle, List, Icon, ListInput, Range } from 'framework7-react';

export default () => (
  <Page>
    <Navbar title="Form Inputs" />

    <BlockTitle>Full Layout / Stacked Labels</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput label="Name" type="text" placeholder="Your name" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Password" type="password" placeholder="Your password" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="E-mail" type="email" placeholder="Your e-mail" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="URL" type="url" placeholder="URL" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Phone" type="tel" placeholder="Your phone number" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Gender" type="select" defaultValue="Male" placeholder="Please choose...">
        <Icon icon="demo-list-icon" slot="media" />
        <option value="Male">Male</option>
        <option value="Female">Female</option>
      </ListInput>

      <ListInput
        label="Birthday"
        type="date"
        defaultValue="2014-04-30"
        placeholder="Please choose..."
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Date time" type="datetime-local" placeholder="Please choose...">
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Range" input={false}>
        <Icon icon="demo-list-icon" slot="media" />
        <Range slot="input" value={50} min={0} max={100} step={1} />
      </ListInput>

      <ListInput label="Textarea" type="textarea" placeholder="Bio">
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Resizable" type="textarea" resizable placeholder="Bio">
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
    </List>

    <BlockTitle>Floating Labels</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput label="Name" floatingLabel type="text" placeholder="Your name" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput
        label="Password"
        floatingLabel
        type="password"
        placeholder="Your password"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="E-mail" floatingLabel type="email" placeholder="Your e-mail" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="URL" floatingLabel type="url" placeholder="URL" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Phone" floatingLabel type="tel" placeholder="Your phone number" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput label="Resizable" floatingLabel type="textarea" resizable placeholder="Bio">
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
    </List>

    <BlockTitle>Floating Labels + Outline Inputs</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput outline label="Name" floatingLabel type="text" placeholder="Your name" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
      <ListInput
        outline
        label="Password"
        floatingLabel
        type="password"
        placeholder="Your password"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
      <ListInput
        outline
        label="E-mail"
        floatingLabel
        type="email"
        placeholder="Your e-mail"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
      <ListInput outline label="URL" floatingLabel type="url" placeholder="URL" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
      <ListInput
        outline
        label="Phone"
        floatingLabel
        type="tel"
        placeholder="Your phone number"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
      <ListInput
        outline
        label="Bio"
        floatingLabel
        type="textarea"
        resizable
        placeholder="Bio"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
    </List>

    <BlockTitle>Validation + Additional Info</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput
        label="Name"
        type="text"
        placeholder="Your name"
        info="Default validation"
        required
        validate
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput
        label="Fruit"
        type="text"
        placeholder="Type 'apple' or 'banana'"
        required
        validate
        pattern="apple|banana"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
        <span slot="info">
          Pattern validation (<b>apple|banana</b>)
        </span>
      </ListInput>

      <ListInput
        label="E-mail"
        type="email"
        placeholder="Your e-mail"
        info="Default e-mail validation"
        required
        validate
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput
        label="URL"
        type="url"
        placeholder="Your URL"
        info="Default URL validation"
        required
        validate
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput
        label="Number"
        type="text"
        placeholder="Enter number"
        info="With custom error message"
        errorMessage="Only numbers please!"
        required
        validate
        pattern="[0-9]*"
        clearButton
      >
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
    </List>

    <BlockTitle>Icon + Input</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput type="text" placeholder="Your name" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput type="password" placeholder="Your password" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput type="email" placeholder="Your e-mail" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>

      <ListInput type="url" placeholder="URL" clearButton>
        <Icon icon="demo-list-icon" slot="media" />
      </ListInput>
    </List>

    <BlockTitle>Label + Input</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput label="Name" type="text" placeholder="Your name" clearButton />

      <ListInput label="Password" type="password" placeholder="Your password" clearButton />

      <ListInput label="E-mail" type="email" placeholder="Your e-mail" clearButton />

      <ListInput label="URL" type="url" placeholder="URL" clearButton />
    </List>

    <BlockTitle>Only Inputs</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput type="text" placeholder="Your name" clearButton />

      <ListInput type="password" placeholder="Your password" clearButton />

      <ListInput type="email" placeholder="Your e-mail" clearButton />

      <ListInput type="url" placeholder="URL" clearButton />
    </List>

    <BlockTitle>Inputs + Additional Info</BlockTitle>
    <List strongIos dividersIos insetIos>
      <ListInput type="text" placeholder="Your name" info="Full name please" clearButton />

      <ListInput
        type="password"
        placeholder="Your password"
        info="8 characters minimum"
        clearButton
      />

      <ListInput
        type="email"
        placeholder="Your e-mail"
        info="Your work e-mail address"
        clearButton
      />

      <ListInput type="url" placeholder="URL" info="Your website URL" clearButton />
    </List>
  </Page>
);