Migrando da v4 para v5
Sim, v5 foi lançada!
Procurando pelos documentos da v4? Encontre-os aqui.
Este documento está em constante evolução. Você atualizou seu site e encontrou algo que não é abordado aqui? Adicione suas alterações no GitHub.
Introdução
Esta é uma referência para atualizar seu site de Material-UI v4 para v5. Embora haja muita coisa coberta por aqui, você provavelmente não precisará fazer tudo no seu site. Faremos o nosso melhor para manter as coisas fáceis de seguir e tão sequenciais quanto possível, para que você possa rapidamente agitar na v5!
Por que você deve migrar
Esta página de documentação cobre o como migrar da v4 para a v5. O por que é abordado na postagem no blog do Medium.
Atualizando suas dependências
A primeira coisa que você precisa fazer é atualizar suas dependências.
Atualize a versão do Material-UI
Você precisa atualizar seu package.json
para usar a versão mais recente do Material-UI e suas dependências de pares.
"dependencies": {
"@emotion/react": "^11.0.0",
"@emotion/styled": "^11.0.0",
"@material-ui/core": "^5.0.0"
}
Ou execute
npm install @material-ui/core@next @emotion/react @emotion/styled
ou
yarn add @material-ui/core@next @emotion/react @emotion/styled
Tratamento de alterações recentes
Suporte de navegadores e versões de node
Os indicativos de suporte do pacote padrão foram alterados. As versões exatas do suporte serão fixadas na consulta browserslist "> 0.5%, last 2 versions, Firefox ESR, not dead, not IE 11, maintained node versions"
.
O pacote padrão agora suporta:
- Node 10 (antes era 8)
- Chrome 84 (antes era 49)
- Edge 85 (antes 14)
- Firefox 78 (antes era 52)
- Safari 13 (macOS) e 12.2 (iOS) (antes era 10)
- para maiores detalhes (veja .browserslistrc (seção
stable
))
Não há mais o suporte para o IE 11. Se você precisar do suporte para o IE 11, confira nosso pacote legado.
Componentes de classe sem o encaminhamento de refs
O suporte para componentes de classe, sem o encaminhamento de refs, na propriedade component
ou como um elemento children
imediato foi removido. Se você estava usando unstable_createStrictModeTheme
ou não recebeu quaisquer avisos relacionados a findDOMNode
no React. StrictMode
, então você não precisa fazer nada. Caso contrário, confira a seção "Advertência com refs" em nosso guia de composição para descobrir como migrar. Esta alteração afeta quase todos os componentes no qual você está usando a propriedade component
ou passando diretamente um children
para componentes que requerem children
como elemento (ou seja, <MenuList><CustomMenuItem /></MenuList>
)
Tema
Pontos de quebra agora são tratados como valores, em vez de intervalos. O comportamento de
down(key)
foi modificado para definir uma consulta de mídia menor do que o valor definido como ponto de quebra correspondente (de forma exclusiva). Obetween(start, end)
também foi atualizado para definir uma consulta de mídia para os valores reais entre o início (de forma inclusiva) e fim (de forma exclusiva). Ao usar o utilitário de pontos de quebradown()
, você precisa atualizar a chave de ponto de quebra em um passo. Ao usar obetween(start, end)
, o ponto de quebra de fim também deve ser atualizado em um passo. O mesmo deve ser feito ao usar o componenteHidden
. Observe exemplos das definições de mudanças necessárias abaixo:-theme.breakpoints.down('sm') // '@media (max-width:959.95px)' - [0, sm + 1) => [0, md) +theme.breakpoints.down('md') // '@media (max-width:959.95px)' - [0, md)
-theme.breakpoints.between('sm', 'md') // '@media (min-width:600px) and (max-width:1279.95px)' - [sm, md + 1) => [0, lg) +theme.breakpoints.between('sm', 'lg') // '@media (min-width:600px) and (max-width:1279.95px)' - [0, lg)
-theme.breakpoints.between('sm', 'xl') // '@media (min-width:600px)' +theme.breakpoints.up('sm') // '@media (min-width:600px)'
-<Hidden smDown>{...}</Hidden> // '@media (min-width:600px)' +<Hidden mdDown>{...}</Hidden> // '@media (min-width:600px)'
A assinatura do utilitário
theme.palette.augmentColor
foi alterada:-theme.palette.augmentColor(red); +theme.palette.augmentColor({ color: red, name: 'brand' });
Utilitário para atualização
Para uma transição mais suave, o utilitário adaptV4Theme
permite que você atualize de forma iterativa algumas das alterações do tema para a nova estrutura do tema.
-import { createMuiTheme } from '@material-ui/core/styles';
+import { createMuiTheme, adaptV4Theme } from '@material-ui/core/styles';
-const theme = createMuiTheme({
+const theme = createMuiTheme(adaptV4Theme({
// v4 theme
-});
+}));
As seguintes alterações são aplicadas por este utilitário adaptador.
Alterações
A abstração com a função "gutters" não provou ser utilizada com frequência suficiente para ser valiosa.
-theme.mixins.gutters(), +paddingLeft: theme.spacing(2), +paddingRight: theme.spacing(2), +[theme.breakpoints.up('sm')]: { + paddingLeft: theme.spacing(3), + paddingRight: theme.spacing(3), +},
theme.spacing
agora retorna valores únicos com a unidade px por padrão. Esta alteração melhora a integração com styled-components & emotion.Antes:
theme.spacing(2) => 16
Depois:
theme.spacing(2) => '16px'
O
theme.palette.type
foi renomeado paratheme.palette.mode
, para melhor seguir o termo "modo escuro", que é geralmente usado para descrever este recurso.import { createMuiTheme } from '@material-ui/core/styles'; -const theme = createMuiTheme({palette: { type: 'dark' }}), +const theme = createMuiTheme({palette: { mode: 'dark' }}),
A chave
theme.palette.text.hint
não era usada em componentes do Material-UI e foi removida. Se você depende dela, você pode adicioná-la de volta:import { createMuiTheme } from '@material-ui/core/styles'; -const theme = createMuiTheme(), +const theme = createMuiTheme({ + palette: { text: { hint: 'rgba(0, 0, 0, 0.38)' } }, +});
As definições dos componentes dentro do tema foi reestruturada sob a chave
components
, para permitir que as pessoas possam descobrir de uma maneira facilitada as definições sobre um componente.
props
import { createMuiTheme } from '@material-ui/core/styles';
const theme = createMuiTheme({
- props: {
- MuiButton: {
- disableRipple: true,
- },
- },
+ components: {
+ MuiButton: {
+ defaultProps: {
+ disableRipple: true,
+ },
+ },
+ },
});
sobrescrevendo
import { createMuiTheme } from '@material-ui/core/styles';
const theme = createMuiTheme({
- overrides: {
- MuiButton: {
- root: { padding: 0 },
- },
- },
+ components: {
+ MuiButton: {
+ styleOverrides: {
+ root: { padding: 0 },
+ },
+ },
+ },
});
Estilos
- Renomeado
fade
paraalpha
para descrever melhor a sua funcionalidade. O nome anterior estava gerando confusão quando a cor de entrada já tinha um valor alfa. O utilitário sobrescreve o valor alfa da cor.
- import { fade } from '@material-ui/core/styles';
+ import { alpha } from '@material-ui/core/styles';
const classes = makeStyles(theme => ({
- backgroundColor: fade(theme.palette.primary.main, theme.palette.action.selectedOpacity),
+ backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
}));
AppBar
- [AppBar] Remova z-index quando a posição for estática e relativa
Alerta
Mova o componente do lab para o core. O componente agora é estável.
-import Alert from '@material-ui/lab/Alert'; -import AlertTitle from '@material-ui/lab/AlertTitle'; +import Alert from '@material-ui/core/Alert'; +import AlertTitle from '@material-ui/core/AlertTitle';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.
Autocompletar
Mova o componente do lab para o core. O componente agora é estável.
-import Autocomplete from '@material-ui/lab/Autocomplete'; -import useAutocomplete from '@material-ui/lab/useAutocomplete'; +import Autocomplete from '@material-ui/core/Autocomplete'; +import useAutoComplete from '@material-ui/core/useAutocomplete';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.Remova a propriedade
debug
. Existem algumas alternativas mais simples:open={true}
, Chrome devtools "Emulate focused", ou React devtools prop setter.renderOption
deve agora retornar uma estrutura completa do DOM da opção. Isso torna as customizações mais fáceis. Você pode aplicar a alteração com:<Autocomplete - renderOption={(option, { selected }) => ( - <React.Fragment> + renderOption={(props, option, { selected }) => ( + <li {...props}> <Checkbox icon={icon} checkedIcon={checkedIcon} style={{ marginRight: 8 }} checked={selected} /> {option.title} - </React.Fragment> + </li> )} />
Renomeie a propriedade
closeIcon
comclearIcon
para evitar confusão.-<Autocomplete closeIcon={defaultClearIcon} /> +<Autocomplete clearIcon={defaultClearIcon} />
Avatar
Renomeie
circle
paracircular
por uma questão de consistência. Os valores possíveis devem ser adjetivos e não substantivos:-<Avatar variant="circle"> -<Avatar classes={{ circle: 'className' }}> +<Avatar variant="circular"> +<Avatar classes={{ circular: 'className' }}>
Mova o componente AvatarGroup do lab para o core.
-import AvatarGroup from '@material-ui/lab/AvatarGroup'; +import AvatarGroup from '@material-ui/core/AvatarGroup';
Badge
Renomeie
circle
paracircular
erectangle
pararectangular
por uma questão de consistência. Os valores possíveis devem ser adjetivos e não substantivos:-<Badge overlap="circle"> -<Badge overlap="rectangle"> +<Badge overlap="circular"> +<Badge overlap="rectangular"> <Badge classes={{ - anchorOriginTopRightRectangle: 'className' - anchorOriginBottomRightRectangle: 'className' - anchorOriginTopLeftRectangle: 'className' - anchorOriginBottomLeftRectangle: 'className' - anchorOriginTopRightCircle: 'className' - anchorOriginBottomRightCircle: 'className' - anchorOriginTopLeftCircle: 'className' + anchorOriginTopRightRectangular: 'className' + anchorOriginBottomRightRectangular: 'className' + anchorOriginTopLeftRectangular: 'className' + anchorOriginBottomLeftRectangular: 'className' + anchorOriginTopRightCircular: 'className' + anchorOriginBottomRightCircular: 'className' + anchorOriginTopLeftCircular: 'className' }}>
BottomNavigation
TypeScript: O
event
emonChange
não é mais tipado comoReact.ChangeEvent
, mas sim emReact.SyntheticEvent
.-<BottomNavigation onChange={(event: React.ChangeEvent<{}>) => {}} /> +<BottomNavigation onChange={(event: React.SyntheticEvent) => {}} />
Box
As propriedades de sistema foram descontinuadas na v5, e substituídas pela propriedade
sx
.-<Box border="1px dashed grey" p={[2, 3, 4]} m={2}> +<Box sx={{ border: "1px dashed grey", p: [2, 3, 4], m: 2 }}>
Este codemod atualizará automaticamente seu código para a nova sintaxe.
O valor de transformação da propriedade de sistema
borderRadius
foi alterado. Se ele receber um número, ele multiplica esse valor pelo valor detheme.shape.borderRadius
. Use uma string para fornecer um valor explícito, empx
.-<Box sx={{ borderRadius: 'borderRadius' }}> +<Box sx={{ borderRadius: 1 }}>
-<Box sx={{ borderRadius: 16 }}> +<Box sx={{ borderRadius: '16px' }}>
Button
A propriedade
color
do botão agora é "primary" por padrão, e "default" foi removido. Isto torna o botão mais próximo da especificação do Material Design e simplifica a API.-<Button color="primary" /> -<Button color="default" /> +<Button /> +<Button />
CircularProgress
A variante
static
foi mesclada na variantedeterminate
, assumindo a última a aparência da primeira. A variante removida raramente foi útil. Era uma exceção para Material Design, e foi removida da especificação.-<CircularProgress variant="determinate" />
-<CircularProgress variant="static" classes={{ static: 'className' }} /> +<CircularProgress variant="determinate" classes={{ determinate: 'className' }} />
NB: Se você já tinha customizado como "determinate", suas customizações provavelmente não são mais válidas. Por favor, remova-as.
Collapse
A propriedade
collapsedHeight
foi renomeada paracollapsedSize
para dar suporte para a direção horizontal.-<Collapse collapsedHeight={40}> +<Collapse collapsedSize={40}>
A chave
classes.container
foi alterada para corresponder à convenção dos outros componentes.-<Collapse classes={{ container: 'collapse' }}> +<Collapse classes={{ root: 'collapse' }}>
Dialog
As propriedades de transição onE* foram removidas. Em vez disso, use TransitionProps.
<Dialog - onEnter={onEnter} - onEntered={onEntered}, - onEntering={onEntered}, - onExit={onEntered}, - onExited={onEntered}, - onExiting={onEntered} + TransitionProps={{ + onEnter, + onEntered, + onEntering, + onExit, + onExited, + onExiting, + }} />
Remova a propriedade
disableBackdropClick
devido a redundância. Em vez disso, ignore eventos de close emonClose
quandoreason === 'backdropClick'
.<Dialog - disableBackdropClick - onClose={handleClose} + onClose={(event, reason) => { + if (reason !== 'backdropClick') { + onClose(event, reason); + } + }} />
[withMobileDialog] Remova este componente de ordem superior. A hook API permite uma solução mais simples e flexível:
-import withMobileDialog from '@material-ui/core/withMobileDialog'; +import { useTheme, useMediaQuery } from '@material-ui/core'; function ResponsiveDialog(props) { - const { fullScreen } = props; + const theme = useTheme(); + const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); const [open, setOpen] = React.useState(false); // ... -export default withMobileDialog()(ResponsiveDialog); +export default ResponsiveDialog;
Divider
Use cor de borda em vez de cor de fundo. Ela impede a altura inconsistente em telas redimensionadas. Para pessoas personalizando a cor da borda, a alteração requer alterar a propriedade CSS com sobrescrita:
.MuiDivider-root { - background-color: #f00; + border-color: #f00; }
Painel de expansão
Renomeie os componentes
ExpansionPanel
paraAccordion
para usar uma convenção de nome mais comum:-import ExpansionPanel from '@material-ui/core/ExpansionPanel'; -import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary'; -import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails'; -import ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionActions from '@material-ui/core/AccordionActions'; -<ExpansionPanel> +<Accordion> - <ExpansionPanelSummary> + <AccordionSummary> <Typography>Location</Typography> <Typography>Select trip destination</Typography> - </ExpansionPanelSummary> + </AccordionSummary> - <ExpansionPanelDetails> + <AccordionDetails> <Chip label="Barbados" onDelete={() => {}} /> <Typography variant="caption">Select your destination of choice</Typography> - </ExpansionPanelDetails> + </AccordionDetails> <Divider /> - <ExpansionPanelActions> + <AccordionActions> <Button size="small">Cancel</Button> <Button size="small">Save</Button> - </ExpansionPanelActions> + </AccordionActions> -</ExpansionPanel> +</Accordion>
TypeScript: O
event
emonChange
não é mais tipado comoReact.ChangeEvent
, mas sim emReact.SyntheticEvent
.-<Accordion onChange={(event: React. ChangeEvent<{}>, expanded: boolean) => {}} /> +<Accordion onChange={(event: React. SyntheticEvent, expanded: boolean) => {}} />
Renomeie
focused
parafocusVisible
por uma questão de consistência:<Accordion classes={{ - focused: 'custom-focus-visible-classname', + focusVisible: 'custom-focus-visible-classname', }} />
Remova
display: flex
de AccordionDetails, é muito opinativo. A maioria dos desenvolvedores espera uma exibição em bloco.Remova a propriedade
IconButtonProps
de AccordionSummary. O componente renderiza um elemento<div>
em vez de um IconButton. A propriedade não é mais necessária.
Fab
Renomeie
round
paracircular
por uma questão de consistência. Os valores possíveis devem ser adjetivos e não substantivos:-<Fab variant="round"> +<Fab variant="circular">
Chip
- Renomeie a variante
default
parafilled
por uma questão de consistência.-<Chip variant="default"> +<Chip variant="filled">
Grid
Renomeie a propriedade
justify
parajustifyContent
para ter conformidade com o nome da propriedade CSS.-<Grid justify="center"> +<Grid justifyContent="center">
GridList
- Renomeie os componentes
GridList
paraImageList
para entrar em conformidade com o nome atual do componente no Material Design. - Renomeie no GridList a propriedade
spacing
paragap
para ter conformidade com o atributo CSS. - Renomeie no GridList a propriedade
cellHeight
pararowHieght
. - Adicione a propriedade
variant
para o GridList. - Renomeie no GridListItemBar a propriedade
actionPosition
paraposition
. (Observe também as alterações de nome de classe relacionadas.) - Use CSS object-fit. Para suporte ao IE11 use um polyfill como https://www.npmjs.com/package/object-fit-images, ou continue usando o componente da v4.
-import GridList from '@material-ui/core/GridList';
-import GridListTile from '@material-ui/core/GridListTile';
-import GridListTileBar from '@material-ui/core/GridListTileBar';
+import ImageList from '@material-ui/core/ImageList';
+import ImageListItem from '@material-ui/core/ImageListItem';
+import ImageListItemBar from '@material-ui/core/ImageListItemBar';
-<GridList spacing={8} cellHeight={200}>
- <GridListTile>
+<ImageList gap={8} rowHeight={200}>
+ <ImageListItem>
<img src="file.jpg" alt="Image title" />
- <GridListTileBar
+ <ImageListItemBar
title="Title"
subtitle="Subtitle"
/>
- </GridListTile>
-</GridList>
+ </ImageListItem>
+</ImageList>
Menu
As propriedades de transição onE* foram removidas. Em vez disso, use TransitionProps.
<Menu - onEnter={onEnter} - onEntered={onEntered}, - onEntering={onEntered}, - onExit={onEntered}, - onExited={onEntered}, - onExiting={onEntered} + TransitionProps={{ + onEnter, + onEntered, + onEntering, + onExit, + onExited, + onExiting, + }} >
Modal
Remova a propriedade
disableBackdropClick
devido a redundância. Em vez disso, ignore eventos de close emonClose
quandoreason === 'backdropClick'
.<Modal - disableBackdropClick - onClose={handleClose} + onClose={(event, reason) => { + if (reason !== 'backdropClick') { + onClose(event, reason); + } + }} />
Remova a propriedade
onEscapeKeyDown
devido a redundância. Em vez disso, useonClose
comreason === "escapeKeyDown"
.<Modal - onEscapeKeyDown={handleEscapeKeyDown} + onClose={(event, reason) => { + if (reason === 'escapeKeyDown') { + handleEscapeKeyDown(event); + } + }} />
Remova a propriedade
onRendered
. Dependendo da sua situação de uso, use um ref com callback no elemento filho ou um hook de efeito no componente filho.
Paginação
Mova o componente do lab para o core. O componente agora é estável.
-import Pagination from '@material-ui/lab/Pagination'; -import PaginationItem from '@material-ui/lab/PaginationItem'; -import { usePagination } from '@material-ui/lab/Pagination'; +import Pagination from '@material-ui/core/Pagination'; +import PaginationItem from '@material-ui/core/PaginationItem'; +import usePagination from '@material-ui/core/usePagination';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.Renomeie
round
paracircular
por uma questão de consistência. Os valores possíveis devem ser adjetivos e não substantivos:-<Pagination shape="round"> -<PaginationItem shape="round"> +<Pagination shape="circular"> +<PaginationItem shape="circular">
Popover
As propriedades de transição onE* foram removidas. Em vez disso, use TransitionProps.
<Popover - onEnter={onEnter} - onEntered={onEntered}, - onEntering={onEntered}, - onExit={onEntered}, - onExited={onEntered}, - onExiting={onEntered} + TransitionProps={{ + onEnter, + onEntered, + onEntering, + onExit, + onExited, + onExiting, + }} />
Popper
Atualize Popper.js da v1 para v2. Esta biblioteca de terceiros introduziu muitas mudanças.
Você pode ler seu guia de migração ou o seguinte resumo:Os prefixos CSS mudaram:
popper: { zIndex: 1, - '&[x-placement*="bottom"] $arrow': { + '&[data-popper-placement*="bottom"] $arrow': {
Nomes de métodos alterados.
-popperRef.current.scheduleUpdate() +popperRef.current.update()
-popperRef.current.update() +popperRef.current.forceUpdate()
A API dos modificadores mudou muito. Há demasiadas alterações para serem cobertas neste guia.
Portal
- Remova a propriedade
onRendered
. Dependendo da sua situação de uso, use um ref com callback no elemento filho ou um hook de efeito no componente filho.
Rating
Mova o componente do lab para o core. O componente agora é estável.
-import Rating from '@material-ui/lab/Rating'; +import Rating from '@material-ui/core/Rating';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.Altere o ícone padrão de vazio para melhorar a acessibilidade. Se você tiver uma propriedade
icon
customizada e não a propriedadeemptyIcon
, você pode reproduzir o comportamento anterior com:<Rating icon={customIcon} + emptyIcon={null} />
Renomeie
visuallyhidden
paravisuallyHidden
por uma questão de consistência:<Rating classes={{ - visuallyhidden: 'custom-visually-hidden-classname', + visuallyHidden: 'custom-visually-hidden-classname', }} />
RootRef
Este componente foi removido. Você pode obter uma referência para o nó DOM subjacente dos nossos componentes através da propriedade
ref
. O componente baseou-se emReactDOM.findDOMNode
ao qual foi descontinuado emReact.StrictMode
.-<RootRef rootRef={ref}> - <Button /> -</RootRef> +<Button ref={ref} />
Skeleton
Mova o componente do lab para o core. O componente agora é estável.
-import Skeleton from '@material-ui/lab/Skeleton'; +import Skeleton from '@material-ui/core/Skeleton';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.Renomeie
circle
paracircular
erect
pararectangular
por uma questão de consistência. Os valores possíveis devem ser adjetivos e não substantivos:-<Skeleton variant="circle" /> -<Skeleton variant="rect" /> -<Skeleton classes={{ circle: 'custom-circle-classname', rect: 'custom-rect-classname', }} /> +<Skeleton variant="circular" /> +<Skeleton variant="rectangular" /> +<Skeleton classes={{ circular: 'custom-circle-classname', rectangular: 'custom-rect-classname', }} />
Slider
TypeScript: O
event
emonChange
não é mais tipado comoReact.ChangeEvent
, mas sim emReact.SyntheticEvent
.-<Slider onChange={(event: React.ChangeEvent<{}>, value: unknown) => {}} /> +<Slider onChange={(event: React.SyntheticEvent, value: unknown) => {}} />
A propriedade
ValueLabelComponent
agora faz parte da propriedadecomponents
.-<Slider ValueLabelComponent={CustomValueLabel} /> +<Slider components={{ ValueLabel: CustomValueLabel }} />
A propriedade
ThumbComponent
agora faz parte da propriedadecomponents
.-<Slider ThumbComponent={CustomThumb} /> +<Slider components={{ Thumb: CustomThumb }} />
Snackbar
A notificação agora é exibida na parte inferior esquerda em telas grandes. Isto corresponde melhor ao comportamento do Gmail, Google Keep, material.io, etc. Você pode reproduzir o comportamento anterior com:
-<Snackbar /> +<Snackbar anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} />
As propriedades de transição onE* foram removidas. Em vez disso, use TransitionProps.
<Snackbar - onEnter={onEnter} - onEntered={onEntered}, - onEntering={onEntered}, - onExit={onEntered}, - onExited={onEntered}, - onExiting={onEntered} + TransitionProps={{ + onEnter, + onEntered, + onEntering, + onExit, + onExited, + onExiting, + }} />
SpeedDial
Mova o componente do lab para o core. O componente agora é estável.
-import SpeedDial from '@material-ui/lab/SpeedDial'; -import SpeedDialAction from '@material-ui/lab/SpeedDialAction'; -import SpeedDialIcon from '@material-ui/lab/SpeedDialIcon'; +import SpeedDial from '@material-ui/core/SpeedDial'; +import SpeedDialAction from '@material-ui/core/SpeedDialAction'; +import SpeedDialIcon from '@material-ui/core/SpeedDialIcon';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.
Assistente
O componente raiz (Paper) foi substituído por um div. Stepper não tem mais elevação, nem herda as propriedades de Paper. Esta alteração destina-se a incentivar a composição.
-<Stepper elevation={2}> - <Step> - <StepLabel>Hello world</StepLabel> - </Step> -</Stepper> +<Paper square elevation={2}> + <Stepper> + <Step> + <StepLabel>Hello world</StepLabel> + </Step> + </Stepper> +<Paper>
Remova o padding automático de 24px.
-<Stepper> - <Step> - <StepLabel>Hello world</StepLabel> - </Step> -</Stepper> +<Stepper style={{ padding: 24 }}> + <Step> + <StepLabel>Hello world</StepLabel> + </Step> +</Stepper>
Table
A customização dos rótulos das ações da paginação da tabela deve ser feita com a propriedade
getItemAriaLabel
. Isso aumenta a consistência com o componentePaginação
.<TablePagination - backIconButtonText="Avant" - nextIconButtonText="Après + getItemAriaLabel={…}
Renomeie
onChangeRowsPerPage
paraonRowsPerPageChange
eonChangePage
paraonPageChange
por questões de consistência da API.<TablePagination - onChangeRowsPerPage={()=>{}} - onChangePage={()=>{}} + onRowsPerPageChange={()=>{}} + onPageChange={()=>{}}
Abas
TypeScript: O
event
emonChange
não é mais tipado comoReact.ChangeEvent
, mas sim emReact.SyntheticEvent
.-<Tabs onChange={(event: React.ChangeEvent<{}>, value: unknown) => {}} /> +<Tabs onChange={(event: React.SyntheticEvent, value: unknown) => {}} />
A API que controla os botões de rolagem foi dividida em duas propriedades.
- A propriedade
scrollButtons
controla quando os botões de rolagem são exibidos dependendo do espaço disponível. - A propriedade
allowScrollButtonsMobile
remove a consulta de mídia CSS que oculta sistematicamente os botões de rolagem no celular.
-<Tabs scrollButtons="on" /> -<Tabs scrollButtons="desktop" /> -<Tabs scrollButtons="off" /> +<Tabs scrollButtons allowScrollButtonsMobile /> +<Tabs scrollButtons /> +<Tabs scrollButtons={false} />
- A propriedade
TextField
Altere a variante padrão de
standard
paraoutlined
. O padrão foi removido da Diretrizes do Material Design.-<TextField value="Standard" /> -<TextField value="Outlined" variant="outlined" /> +<TextField value="Standard" variant="standard" /> +<TextField value="Outlined" />
Este codemod atualizará automaticamente seu código.
Renomeie a propriedade
rowsMax
paramaxRows
por questão de consistência com atributos HTML.-<TextField rowsMax={6}> +<TextField maxRows={6}>
Melhor isolar o comportamento fixo de altura do textarea para o dinâmico. Você precisa usar a propriedade
minRows
da seguinte forma:-<TextField rows={2} maxRows={5} /> +<TextField minRows={2} maxRows={5} />
Altere o que é esperado no encaminhamento de ref no componente customizado
inputComponent
. O componente deve encaminhar a propriedaderef
em vez da propriedadeinputRef
.-function NumberFormatCustom(props) { - const { inputRef, onChange, ...other } = props; +const NumberFormatCustom = React.forwardRef(function NumberFormatCustom( + props, + ref, +) { const { onChange, ...other } = props; return ( <NumberFormat {...other} - getInputRef={inputRef} + getInputRef={ref}
Renomeie as classes
marginDense
einputMarginDense
parasizeSmall
einputSizeSmall
para corresponder com a propriedade.-<Input margin="dense" /> +<Input size="small" />
TextareaAutosize
Remova a propriedade
rows
, useminRows
em vez disso. Esta alteração visa esclarecer o comportamento da propriedade.-<TextareaAutosize rows={2} /> +<TextareaAutosize minRows={2} />
Renomeie a propriedade
rowsMax
paramaxRows
por questão de consistência com atributos HTML.-<TextareAutosize rowsMax={6}> +<TextareAutosize maxRows={6}>
Renomeie a propriedade
rowsMin
paraminRows
por questão de consistência com atributos HTML.-<TextareAutosize rowsMin={1}> +<TextareAutosize minRows={1}>
ToggleButton
Mova o componente do lab para o core. O componente agora é estável.
-import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; +import ToggleButton from '@material-ui/core/ToggleButton'; +import ToggleButtonGroup from '@material-ui/core/ToggleButtonGroup';
Você pode usar o codemod
moved-lab-modules
para realizar uma migração automática.
Tooltip
Dicas agora estão interativas por padrão.
O comportamento padrão anterior era falho, como mostra neste artigo, success criterion 1.4.3 ("hoverable") in WCAG 2.1. Para refletir o novo valor padrão, a propriedade foi renomeada para
disableInteractive
. Se você quiser reproduzir o comportamento antigo (portanto não chegando ao nível AA), você pode aplicar a seguinte alteração:-<Tooltip> +<Tooltip disableInteractive> #Dicas interativas não precisam mais da propriedade `interactive`. -<Tooltip interactive> +<Tooltip>
Tipografia
Substitua a propriedade
srOnly
para não duplicar as capacidades do Sistema:-import Typography from '@material-ui/core/Typography'; +import { visuallyHidden } from '@material-ui/system'; +import styled from 'styled-component'; +const Span = styled('span')(visuallyHidden); -<Typography variant="srOnly">Create a user</Typography> +<Span>Create a user</Span>
Sistema
- Substitua a propriedade
css
parasx
para evitar a colisão com as propriedades CSS de styled-components & emotion.
-<Box css={{ color: 'primary.main' }} />
+<Box sx={{ color: 'primary.main' }} />