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.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) => 16Depois:
theme.spacing(2) => '16px'O
theme.palette.typefoi 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.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
closeIconcomclearIconpara evitar confusão.-<Autocomplete closeIcon={defaultClearIcon} /> +<Autocomplete clearIcon={defaultClearIcon} />
Avatar
Renomeie
circleparacircularpor 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
circleparacircularerectanglepararectangularpor 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
eventemonChangenã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
borderRadiusfoi 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
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 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
collapsedHeightfoi renomeada paracollapsedSizepara 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 emonClosequandoreason === '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
ExpansionPanelparaAccordionpara 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
eventemonChangenão é mais tipado comoReact.ChangeEvent, mas sim emReact.SyntheticEvent.-<Accordion onChange={(event: React. ChangeEvent<{}>, expanded: boolean) => {}} /> +<Accordion onChange={(event: React. SyntheticEvent, expanded: boolean) => {}} />Renomeie
focusedparafocusVisiblepor 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
roundparacircularpor 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
justifyparajustifyContentpara 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 emonClosequandoreason === 'backdropClick'.<Modal - disableBackdropClick - onClose={handleClose} + onClose={(event, reason) => { + if (reason !== 'backdropClick') { + onClose(event, reason); + } + }} />Remova a propriedade
onEscapeKeyDowndevido a redundância. Em vez disso, useonClosecomreason === "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
roundparacircularpor 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 propriedadeemptyIcon, você pode reproduzir o comportamento anterior com:<Rating icon={customIcon} + emptyIcon={null} />Renomeie
visuallyhiddenparavisuallyHiddenpor 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.findDOMNodeao 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-modulespara realizar uma migração automática.Renomeie
circleparacircularerectpararectangularpor 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
eventemonChangenã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
ValueLabelComponentagora faz parte da propriedadecomponents.-<Slider ValueLabelComponent={CustomValueLabel} /> +<Slider components={{ ValueLabel: CustomValueLabel }} />A propriedade
ThumbComponentagora 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-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 componentePaginação.<TablePagination - backIconButtonText="Avant" - nextIconButtonText="Après + getItemAriaLabel={…}Renomeie
onChangeRowsPerPageparaonRowsPerPageChangeeonChangePageparaonPageChangepor questões de consistência da API.<TablePagination - onChangeRowsPerPage={()=>{}} - onChangePage={()=>{}} + onRowsPerPageChange={()=>{}} + onPageChange={()=>{}}
Abas
TypeScript: O
eventemonChangenã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
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
standardparaoutlined. 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
rowsMaxparamaxRowspor 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 propriedaderefem 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
marginDenseeinputMarginDenseparasizeSmalleinputSizeSmallpara corresponder com a propriedade.-<Input margin="dense" /> +<Input size="small" />
TextareaAutosize
Remova a propriedade
rows, useminRowsem vez disso. Esta alteração visa esclarecer o comportamento da propriedade.-<TextareaAutosize rows={2} /> +<TextareaAutosize minRows={2} />Renomeie a propriedade
rowsMaxparamaxRowspor questão de consistência com atributos HTML.-<TextareAutosize rowsMax={6}> +<TextareAutosize maxRows={6}>Renomeie a propriedade
rowsMinparaminRowspor 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' }} />