2
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?

MUIのAutocompleteの基本を抑える

Posted at

はじめに

Google検索などで、テキストボックスに値を入力すると、入力候補の値がプルダウンでサジェストされるのを見たことがあるかと思います。

あのUIを表現できるのが、MUIのAutocompleteです。

業務で使う機会があったので、その基本的な使い方を抑えてみます。

基本の使い方

画面例

まず、先に画面例から示します。
demo_basic.gif

コード例

このような挙動が以下のコードで簡単に実装できます。

import { Autocomplete, TextField } from "@mui/material";
import { useState } from "react";
interface Fruit {
  value: string;
  label: string;
}
const films: Fruit[] = [
  { value: 'apple', label:'りんご'},
  { value: 'banana', label:'ばなな'},
  { value: 'cherry', label:'さくらんぼ'},
];

const BasicAutocomplete = () => {
  const [value, setValue] = useState<Fruit | null>(null);

  return (
    <Autocomplete
      value={value}
      onChange={(_e, newValue: Fruit | null) => {
        setValue(newValue);
      }}
      options={films}
      getOptionLabel={(option) => option.label}
      renderInput={(params) => (
        <TextField {...params} label="フルーツを選択" variant="outlined" />
      )}
    />
  );
};

export default BasicAutocomplete;

コード解説

Autcompleteコンポーネントの基本的なプロパティについて確認していきます。

value

設定されている値です。
これはMUIのどのコンポーネントでも基本的に同じなので特段の解説は不要かと思います。

onChange

値が変更されたときの挙動です。
こちらも特段の解説はしません。

options

選択可能な値を配列で指定します。
これがプルダウンでサジェストされる値になります。

getOptionLabel

プルダウンに表示される表示名を設定する関数を指定します。
関数は引数にoptionsの要素を受け取ります。
戻り値として、設定したい表示名を指定します。

renderInput

入力フィールドのレンダリングをカスタマイズできます。
基本的にはTextFieldコンポーネントを指定します。

ここで使用しているのは本当にごく一部で、ほかにも多くのオプションを指定できます。
値のフィルタリングや、複数選択の制御、フォーカスを当てたときの挙動など、本当にさまざまなカスタマイズができます。

詳細は以下を参照してください

まとめ

基礎の基礎の使い方をまとめました。
これだけだとあまり内容が充実していないので、よくあるエラーやより細かいカスタマイズについて、今後内容を追記していければと思っています。

2
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
2
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?