Я пытаюсь реализовать этот макет в Material-UI с помощью компонента Grid.
Я выделил границу контейнера красным, чтобы было понятнее, где находятся границы.
- Кнопка «Добавить» должна находиться на правом конце контейнера.
- Фишки должны быть выровнены по левому краю и занимать как можно больше места по горизонтали
- Когда фишки складываются, кнопка «Добавить» должна быть выровнена по вертикали относительно дна контейнера
Мне удалось реализовать это с помощью вложенных сеток, как в этом примере:
import React, { useState } from 'react'
import { Button, Grid, Chip, Box } from '@material-ui/core'
export default function App() {
const [chips, setChips] = useState(1)
const addChip = () => setChips(c => c + 1)
const removeChip = i => setChips(c => c - 1)
const renderChips = () =>
Array(chips)
.fill(null)
.map((_, i) => (
<Grid item key={i}>
<Chip label={`Chip ${i}`} onDelete={() => removeChip(i)} />
</Grid>
))
return (
<Box border="1px solid red">
<Grid container wrap="nowrap" spacing={2}>
<Grid item xs>
<Grid container spacing={1}>
{renderChips()}
</Grid>
</Grid>
<Grid item display="flex" component={Box}>
<Grid container alignItems="flex-end">
<Grid item>
<Button variant="contained" color="primary" onClick={addChip}>
Add
</Button>
</Grid>
</Grid>
</Grid>
</Grid>
</Box>
)
}
Я бы хотел избежать вложить компоненты сетки больше, чем необходимо. В частности, я хотел бы использовать <Grid item container>
вместо <Grid container>
, содержащего <Grid item>
, но, используя этот подход, я не могу достичь такой схемы расширения раздела микросхем слева и удерживания кнопки справа, сохраняя он выровнен по низу по вертикали.