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/styledTratamento 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). O- between(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 quebra- down(), você precisa atualizar a chave de ponto de quebra em um passo. Ao usar o- between(start, end), o ponto de quebra de fim também deve ser atualizado em um passo. O mesmo deve ser feito ao usar o componente- Hidden. 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.augmentColorfoi 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.spacingagora 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.typefoi renomeado para- theme.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.hintnã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 fadeparaalphapara 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-modulespara 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-modulespara 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.
- renderOptiondeve 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 - closeIconcom- clearIconpara evitar confusão.- -<Autocomplete closeIcon={defaultClearIcon} /> +<Autocomplete clearIcon={defaultClearIcon} />
Avatar
- Renomeie - circlepara- circularpor 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 - circlepara- circulare- rectanglepara- rectangularpor 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 - eventem- onChangenão é mais tipado como- React.ChangeEvent, mas sim em- React.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 - borderRadiusfoi alterado. Se ele receber um número, ele multiplica esse valor pelo valor de- theme.shape.borderRadius. Use uma string para fornecer um valor explícito, em- px.- -<Box sx={{ borderRadius: 'borderRadius' }}> +<Box sx={{ borderRadius: 1 }}>- -<Box sx={{ borderRadius: 16 }}> +<Box sx={{ borderRadius: '16px' }}>
Button
- A propriedade - colordo 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 - staticfoi mesclada na variante- determinate, 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 - collapsedHeightfoi renomeada para- collapsedSizepara dar suporte para a direção horizontal.- -<Collapse collapsedHeight={40}> +<Collapse collapsedSize={40}>
- A chave - classes.containerfoi 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 - disableBackdropClickdevido a redundância. Em vez disso, ignore eventos de close em- onClosequando- reason === '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 - ExpansionPanelpara- Accordionpara 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 - eventem- onChangenão é mais tipado como- React.ChangeEvent, mas sim em- React.SyntheticEvent.- -<Accordion onChange={(event: React. ChangeEvent<{}>, expanded: boolean) => {}} /> +<Accordion onChange={(event: React. SyntheticEvent, expanded: boolean) => {}} />
- Renomeie - focusedpara- focusVisiblepor uma questão de consistência:- <Accordion classes={{ - focused: 'custom-focus-visible-classname', + focusVisible: 'custom-focus-visible-classname', }} />
- Remova - display: flexde AccordionDetails, é muito opinativo. A maioria dos desenvolvedores espera uma exibição em bloco.
- Remova a propriedade - IconButtonPropsde AccordionSummary. O componente renderiza um elemento- <div>em vez de um IconButton. A propriedade não é mais necessária.
Fab
- Renomeie - roundpara- circularpor 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 defaultparafilledpor uma questão de consistência.-<Chip variant="default"> +<Chip variant="filled">
Grid
- Renomeie a propriedade - justifypara- justifyContentpara ter conformidade com o nome da propriedade CSS.- -<Grid justify="center"> +<Grid justifyContent="center">
GridList
- Renomeie os componentes GridListparaImageListpara entrar em conformidade com o nome atual do componente no Material Design.
- Renomeie no GridList a propriedade  spacingparagappara ter conformidade com o atributo CSS.
- Renomeie no GridList a propriedade cellHeightpararowHieght.
- Adicione a propriedade variantpara o GridList.
- Renomeie no GridListItemBar a propriedade actionPositionparaposition. (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 - disableBackdropClickdevido a redundância. Em vez disso, ignore eventos de close em- onClosequando- reason === 'backdropClick'.- <Modal - disableBackdropClick - onClose={handleClose} + onClose={(event, reason) => { + if (reason !== 'backdropClick') { + onClose(event, reason); + } + }} />
- Remova a propriedade - onEscapeKeyDowndevido a redundância. Em vez disso, use- onClosecom- reason === "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-modulespara realizar uma migração automática.
- Renomeie - roundpara- circularpor 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-modulespara realizar uma migração automática.
- Altere o ícone padrão de vazio para melhorar a acessibilidade. Se você tiver uma propriedade - iconcustomizada e não a propriedade- emptyIcon, você pode reproduzir o comportamento anterior com:- <Rating icon={customIcon} + emptyIcon={null} />
- Renomeie - visuallyhiddenpara- visuallyHiddenpor 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 em- ReactDOM.findDOMNodeao qual foi descontinuado em- React.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-modulespara realizar uma migração automática.
- Renomeie - circlepara- circulare- rectpara- rectangularpor 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 - eventem- onChangenão é mais tipado como- React.ChangeEvent, mas sim em- React.SyntheticEvent.- -<Slider onChange={(event: React.ChangeEvent<{}>, value: unknown) => {}} /> +<Slider onChange={(event: React.SyntheticEvent, value: unknown) => {}} />
- A propriedade - ValueLabelComponentagora faz parte da propriedade- components.- -<Slider ValueLabelComponent={CustomValueLabel} /> +<Slider components={{ ValueLabel: CustomValueLabel }} />
- A propriedade - ThumbComponentagora faz parte da propriedade- components.- -<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-modulespara 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 componente- Paginação.- <TablePagination - backIconButtonText="Avant" - nextIconButtonText="Après + getItemAriaLabel={…}
- Renomeie - onChangeRowsPerPagepara- onRowsPerPageChangee- onChangePagepara- onPageChangepor questões de consistência da API.- <TablePagination - onChangeRowsPerPage={()=>{}} - onChangePage={()=>{}} + onRowsPerPageChange={()=>{}} + onPageChange={()=>{}}
Abas
- TypeScript: O - eventem- onChangenão é mais tipado como- React.ChangeEvent, mas sim em- React.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 scrollButtonscontrola quando os botões de rolagem são exibidos dependendo do espaço disponível.
- A propriedade allowScrollButtonsMobileremove 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 - standardpara- outlined. 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 - rowsMaxpara- maxRowspor 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 - minRowsda 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 propriedade- refem vez da propriedade- inputRef.- -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 - marginDensee- inputMarginDensepara- sizeSmalle- inputSizeSmallpara corresponder com a propriedade.- -<Input margin="dense" /> +<Input size="small" />
TextareaAutosize
- Remova a propriedade - rows, use- minRowsem vez disso. Esta alteração visa esclarecer o comportamento da propriedade.- -<TextareaAutosize rows={2} /> +<TextareaAutosize minRows={2} />
- Renomeie a propriedade - rowsMaxpara- maxRowspor questão de consistência com atributos HTML.- -<TextareAutosize rowsMax={6}> +<TextareAutosize maxRows={6}>
- Renomeie a propriedade - rowsMinpara- minRowspor 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-modulespara 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 - srOnlypara 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 cssparasxpara evitar a colisão com as propriedades CSS de styled-components & emotion.
-<Box css={{ color: 'primary.main' }} />
+<Box sx={{ color: 'primary.main' }} />