Material UI - это библиотека материального дизайна, созданная для React.
Это набор компонентов React со стилями материального дизайна.
В этой статье мы рассмотрим, как добавить текстовые поля с помощью пользовательского интерфейса материала.
Размеры
Мы можем изменить размер текстового поля с помощью свойства size.
Например, мы можем написать:
import React from "react"; import TextField from "@material-ui/core/TextField"; export default function App() { return ( <div className="App"> <TextField label="Size" id="small" defaultValue="Small" size="small" /> </div> ); }
добавить текстовое поле размером small.
Макет
Мы можем расположить наши текстовые поля по-своему.
Для этого мы можем написать:
import React from "react"; import TextField from "@material-ui/core/TextField"; import { makeStyles } from "@material-ui/core/styles"; const useStyles = makeStyles(theme => ({ root: { display: "flex", flexWrap: "wrap" }, textField: { marginLeft: theme.spacing(1), marginRight: theme.spacing(1), width: "25ch" } })); export default function App() { const classes = useStyles(); return ( <> <div> <TextField id="filled-full-width" label="Label" style={{ margin: 8 }} placeholder="Placeholder" helperText="Full width!" fullWidth margin="normal" InputLabelProps={{ shrink: true }} variant="filled" /> <TextField label="None" id="filled-margin-none" defaultValue="foo" className={classes.textField} helperText="foo" /> <TextField label="Dense" style={{ margin: 3 }} id="filled-margin-dense" defaultValue="bar" className={classes.textField} helperText="bar" margin="dense" /> </div> </> ); }
для добавления текстовых полей.
У нас есть одно полноразмерное текстовое поле вверху и 2 более коротких внизу.
У них есть обычные реквизиты, у которых есть helperText для подсказки.
margin имеют запас.
У нас также есть несколько стилей для изменения полей.
className имеют имена классов.
placeholder есть заполнитель для текстовых полей.
variant можно заливать или нет.
margin может быть меньше значения по умолчанию с dense.
Неконтролируемый vs контролируемый
Текстовые поля могут быть неконтролируемыми, что означает, что они не имеют никакого состояния.
Или его можно контролировать, что означает, что к нему привязано состояние.
Чтобы создать контролируемое текстовое поле, мы можем добавить реквизиты value и onChange к TextField.
Например, мы можем написать:
import React from "react"; import TextField from "@material-ui/core/TextField"; export default function App() { const [name, setName] = React.useState("james"); const handleChange = event => { setName(event.target.value); }; return ( <> <div> <TextField id="standard-name" label="Name" value={name} onChange={handleChange} /> </div> </> ); }
У нас есть состояние name, которое передается в свойство value.
И функция handleChange, переданная в свойство onChange.
Затем, когда мы что-то вводим, функция handleChange запускается и вызывает setName для обновления состояния name.
Компоненты
TextField состоит из более мелких компонентов.
Они включают FormControl, Input, FilledInput, InputLabel, OutlinedInput и FormHelperText.
Например, мы можем заменить TextField на:
import React from "react";
import FormControl from "@material-ui/core/FormControl";
import Input from "@material-ui/core/Input";
import InputLabel from "@material-ui/core/InputLabel";
export default function App() {
const [name, setName] = React.useState("james");
const handleChange = event => {
setName(event.target.value);
};
return (
<>
<div>
<FormControl>
<InputLabel htmlFor="input">Name</InputLabel>
<Input id="input" value={name} onChange={handleChange} />
</FormControl>
</div>
</>
);
}
У нас есть Input для поля ввода и InputLabel для метки для поля ввода.
Чтобы добавить текст подсказки, мы можем использовать компонент FormHelperText:
import React from "react"; import FormControl from "@material-ui/core/FormControl"; import Input from "@material-ui/core/Input"; import InputLabel from "@material-ui/core/InputLabel"; import FormHelperText from "@material-ui/core/FormHelperText"; export default function App() { const [name, setName] = React.useState("james"); const handleChange = event => { setName(event.target.value); }; return ( <> <div> <FormControl> <InputLabel htmlFor="input">Name</InputLabel> <Input id="input" value={name} onChange={handleChange} /> <FormHelperText>enter your name</FormHelperText> </FormControl> </div> </> ); }
Мы также можем использовать компоненты OutlinedInput и FilledInput для добавления полей ввода с этими вариантами:
import React from "react"; import FormControl from "@material-ui/core/FormControl"; import OutlinedInput from "@material-ui/core/OutlinedInput"; import InputLabel from "@material-ui/core/InputLabel"; import FormHelperText from "@material-ui/core/FormHelperText"; export default function App() { const [name, setName] = React.useState("james"); const handleChange = event => { setName(event.target.value); }; return ( <> <div> <FormControl> <InputLabel htmlFor="input">Name</InputLabel> <OutlinedInput id="input" value={name} onChange={handleChange} label="Name" /> <FormHelperText>enter your name</FormHelperText> </FormControl> </div> </> ); }
, чтобы добавить в поле поле ввода с контуром.
И мы можем использовать FilledInput, чтобы добавить поле ввода с фоном:
import React from "react"; import FormControl from "@material-ui/core/FormControl"; import FilledInput from "@material-ui/core/FilledInput"; import InputLabel from "@material-ui/core/InputLabel"; import FormHelperText from "@material-ui/core/FormHelperText"; export default function App() { const [name, setName] = React.useState("james"); const handleChange = event => { setName(event.target.value); }; return ( <> <div> <FormControl> <InputLabel htmlFor="input">Name</InputLabel> <FilledInput id="input" value={name} onChange={handleChange} /> <FormHelperText>enter your name</FormHelperText> </FormControl> </div> </> ); }
Заключение
TextField состоит из множества компонентов формы.
Следовательно, мы можем добавить их вместо TextField.
Мы также можем сделать текстовое поле и ввод контроллера.