#reactjs #material-ui
#reactjs #material-ui
Вопрос:
Я создаю форму react с помощью material-ui.
Я бы хотел, чтобы форма представляла собой фиксированный вид с 2 столбцами, а не поток, основанный на размере браузера, чтобы он всегда был таким:
|First Name |Last Name|
|Street Address |City |
И не заканчивается так
|First Name |Last Name| Street Address |City |
https://codesandbox.io/s/0q7kw76nyl
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";
const styles = theme => ({
textField: {
marginLeft: theme.spacing.unit,
marginRight: theme.spacing.unit
}
});
class TextFields extends React.Component {
state = {
firstName: "",
lastName: "",
street: "",
city: ""
};
handleChange = name => event => {
this.setState({ [name]: event.target.value });
};
render() {
const { classes } = this.props;
return (
<form className={classes.container} noValidate autoComplete="off">
<TextField
id="first-name"
label="First Name"
className={classes.textField}
value={this.state.firstName}
onChange={this.handleChange("firstName")}
margin="normal"
/>
<TextField
id="last-name"
label="Last Name"
className={classes.textField}
value={this.state.lastName}
onChange={this.handleChange("lastName")}
margin="normal"
/>
<TextField
id="address-street"
label="Street Address"
className={classes.textField}
value={this.state.street}
onChange={this.handleChange("street")}
margin="normal"
/>
<TextField
id="address-city"
label="City"
className={classes.textField}
value={this.state.city}
onChange={this.handleChange("city")}
margin="normal"
/>
</form>
);
}
}
TextFields.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(TextFields);
Ответ №1:
Как и выше, вставка в divs отлично работает.
Вы также можете поместить их в макет сетки для дополнительной настройки.
Макет сетки имеет некоторые дополнительные функции, такие как интервал и выравнивание элементов, настраиваемая ширина элементов, вот документация.
import Grid from '@material-ui/core/Grid'
<Grid container>
<Grid item xs={6}>
...
</Grid>
<Grid item xs={6}>
...
</Grid>
</Grid>
Ответ №2:
Вы можете использовать как контейнер сетки, так и элемент одновременно.
<Grid container spacing={2} >
<Grid container item xs={6} direction="column" >
<TextField />
<TextField />
<TextField />
</Grid>
<Grid container item xs={6} direction="column" >
<TextField />
<TextField />
</Grid>
</Grid>
Ответ №3:
Попробуйте разделить две группы на разделы следующим образом:
https://codesandbox.io/s/vy6k6w1jq3
<div>
<TextField/>
<TextField/>
</div>
<div>
<TextField/>
<TextField/>
</div>
Комментарии:
1. Это выглядит чище и проще и работает в изолированной среде, но, как ни странно, по какой-то причине не остается неизменным на более сложной странице (они становятся вертикальными группами вместо горизонтальных!). Поэтому мне придется использовать сетки.
2. @opticyclic да, я надеялся, что более простого решения будет достаточно. Grid / Flexbox справились бы с задачей