Reactでアプリを作ってると、「見た目がショボい」と感じるタイミングが必ず来る。
そんなときの救世主が MUI(Material UI)。GoogleのMaterial Designに準拠していて、整った見た目のUIがすぐに使える。
この記事では、MUIの基本コンポーネント4つにしぼって、サクッとキャッチアップしていく。
sx
やstyled
)実務だと「見た目を整えるためにMUI使ってます」って現場はかなり多い。
コンポーネント | 用途 |
---|---|
TextField | テキスト入力欄 |
Button | ボタン(クリック操作) |
Box | レイアウト(divの代わり) |
Typography | 見出しや本文の表示 |
tsx
<TextField
fullWidth
label="ユーザー名"
value={username}
onChange={(e) => setUsername(e.target.value)}
variant="outlined"
/>
label
:フィールド名(ラベル)value
, onChange
:Reactの状態で管理variant
:見た目のバリエーション(outlined
, filled
, standard
)tsx
<Button variant="contained" color="primary" onClick={handleSubmit}>
送信
</Button>
variant
:contained
, outlined
, text
の3パターンcolor
:primary
, secondary
, error
などonClick
:普通にReactの関数を渡すだけtsx
<Box
sx={{
maxWidth: 400,
mx: 'auto',
mt: 4,
p: 3,
boxShadow: 1,
borderRadius: 1,
}}
>
{/* 中にコンポーネントを置く */}
</Box>
sx
:MUI独自のスタイル指定(CSS-in-JS風)mx: 'auto'
:中央寄せ、mt: 4
:上マージンsx
だけでいけるtsx
<Typography variant="h5" gutterBottom>
入力フォーム
</Typography>
variant
:h1
〜h6
, body1
, body2
, subtitle1
などgutterBottom
:下にスペースを追加sx
プロパティMUIのスタイリングの中心は<Box>
とsx
。
tsx
<Box sx={{ backgroundColor: 'lightblue', padding: 2 }}>
<Typography>見出し</Typography>
</Box>
tsx
<Box sx={{ maxWidth: 400, mx: 'auto' }}>
<Typography variant="h6" gutterBottom>
ログインフォーム
</Typography>
<TextField label="メールアドレス" fullWidth />
<TextField label="パスワード" type="password" fullWidth sx={{ mt: 2 }} />
<Button variant="contained" fullWidth sx={{ mt: 3 }}>
ログイン
</Button>
</Box>
これだけで、「それっぽいログインフォーム」が完成。スタイル地獄から解放される。
このサンプルでは、上記の4つのコンポーネントだけで構成された「シンプルなフォームUI」を構築。
状態管理(useState)との組み合わせで、入力内容のリアルタイム表示もしてる。
TextField
, Button
, Box
, Typography
sx
でスタイルも簡単に指定できる