Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[docs] List all the Tab components under the API section #21241

Merged
merged 4 commits into from
Jun 5, 2020
Merged

[docs] List all the Tab components under the API section #21241

merged 4 commits into from
Jun 5, 2020

Conversation

emretapci
Copy link
Contributor

@emretapci emretapci commented May 29, 2020

to avoid re-render of tab sub-components on every select of tabs, instead of creating tab sub-components, their visibility can be modified.

to avoid re-render of tab sub-components on every select of tabs, instead of creating tab sub-components, thier visibility can be modified.
@oliviertassinari
Copy link
Member

oliviertassinari commented May 29, 2020

It's meant to speed-up perf. You are free to customize the rendering, I don't think that we should change the demo.
However, this could make an interesting prop for <TabPanel /> cc @eps1lon.

@oliviertassinari oliviertassinari added the component: tabs This is the name of the generic UI component, not the React module! label May 29, 2020
@emretapci
Copy link
Contributor Author

In this way, the state held in TabPanel's child controls get lost between tab switches.

@mui-pr-bot
Copy link

mui-pr-bot commented May 29, 2020

Details of bundle changes.

Comparing: 9bd4277...8dda088

Details of page changes
bundle Size Change Size Gzip Change Gzip
/components/tabs ▲ +100 B (+0.41% ) 24.5 kB -- -1 B
/api-docs/tab-context ▲ +30 B (+2.86% ) 1.08 kB -- -1 B
/api-docs/tab-panel ▲ +20 B (+1.38% ) 1.47 kB -- -1 B
/api-docs/grid-list-tile-bar ▲ +10 B (+0.56% ) 1.8 kB -- -1 B
/api-docs/grid-list-tile ▼ -10 B (-0.58% ) 1.72 kB -- -1 B
/api-docs/grid-list ▲ +10 B (+0.62% ) 1.62 kB -- -1 B
/api-docs/menu ▼ -10 B (-0.41% ) 2.4 kB -- -1 B
/api-docs/tab-list ▲ +10 B (+0.93% ) 1.09 kB -- -1 B
/performance/table-raw ▼ -1 B (-0.16% ) 612 B -- -1 B
/_app -- 37.4 kB -- -1 B
/api-docs/alert-title -- 1.4 kB -- -1 B
/api-docs/alert -- 2.4 kB -- -1 B
/api-docs/app-bar -- 1.94 kB -- -1 B
/api-docs/autocomplete -- 4.61 kB -- -1 B
/api-docs/avatar-group -- 1.51 kB -- -1 B
/api-docs/avatar -- 1.86 kB -- -1 B
/api-docs/backdrop -- 1.72 kB -- -1 B
/api-docs/badge -- 2.13 kB -- -1 B
/api-docs/bottom-navigation-action -- 1.81 kB -- -1 B
/api-docs/bottom-navigation -- 1.7 kB -- -1 B
/api-docs/breadcrumbs -- 1.79 kB -- -1 B
/api-docs/button-base -- 2.22 kB -- -1 B
/api-docs/button-group -- 2.22 kB -- -1 B
/api-docs/button -- 2.53 kB -- -1 B
/api-docs/card-action-area -- 1.58 kB -- -1 B
/api-docs/card-actions -- 1.47 kB -- -1 B
/api-docs/card-content -- 1.45 kB -- -1 B
/api-docs/card-header -- 1.78 kB -- -1 B
/api-docs/card-media -- 1.69 kB -- -1 B
/api-docs/card -- 1.5 kB -- -1 B
/api-docs/checkbox -- 2.3 kB -- -1 B
/api-docs/chip -- 2.46 kB -- -1 B
/api-docs/circular-progress -- 2.07 kB -- -1 B
/api-docs/click-away-listener -- 1.44 kB -- -1 B
/api-docs/collapse -- 2.13 kB -- -1 B
/api-docs/container -- 1.86 kB -- -1 B
/api-docs/css-baseline -- 1.4 kB -- -1 B
/api-docs/dialog-actions -- 1.47 kB -- -1 B
/api-docs/dialog-content-text -- 1.48 kB -- -1 B
/api-docs/dialog-content -- 1.45 kB -- -1 B
/api-docs/dialog-title -- 1.49 kB -- -1 B
/api-docs/dialog -- 2.73 kB -- -1 B
/api-docs/divider -- 1.81 kB -- -1 B
/api-docs/drawer -- 2.13 kB -- -1 B
/api-docs/expansion-panel-actions -- 1.49 kB -- -1 B
/api-docs/expansion-panel-details -- 1.41 kB -- -1 B
/api-docs/expansion-panel-summary -- 1.72 kB -- -1 B
/api-docs/expansion-panel -- 1.97 kB -- -1 B
/api-docs/fab -- 2.09 kB -- -1 B
/api-docs/fade -- 1.5 kB -- -1 B
/api-docs/filled-input -- 2.87 kB -- -1 B
/api-docs/form-control-label -- 1.98 kB -- -1 B
/api-docs/form-control -- 2.36 kB -- -1 B
/api-docs/form-group -- 1.55 kB -- -1 B
/api-docs/form-helper-text -- 1.91 kB -- -1 B
/api-docs/form-label -- 1.84 kB -- -1 B
/api-docs/grid -- 2.56 kB -- -1 B
/api-docs/grow -- 1.55 kB -- -1 B
/api-docs/hidden -- 1.53 kB -- -1 B
/api-docs/icon-button -- 2.08 kB -- -1 B
/api-docs/icon -- 1.78 kB -- -1 B
/api-docs/input-adornment -- 1.93 kB -- -1 B
/api-docs/input-base -- 2.95 kB -- -1 B
/api-docs/input-label -- 2.07 kB -- -1 B
/api-docs/input -- 2.83 kB -- -1 B
/api-docs/linear-progress -- 2.03 kB -- -1 B
/api-docs/link -- 1.93 kB -- -1 B
/api-docs/list-item-avatar -- 1.5 kB -- -1 B
/api-docs/list-item-icon -- 1.51 kB -- -1 B
/api-docs/list-item-secondary-action -- 1.47 kB -- -1 B
/api-docs/list-item-text -- 1.79 kB -- -1 B
/api-docs/list-item -- 2.25 kB -- -1 B
/api-docs/list-subheader -- 1.77 kB -- -1 B
/api-docs/list -- 1.68 kB -- -1 B
/api-docs/menu-item -- 1.74 kB -- -1 B
/api-docs/menu-list -- 1.57 kB -- -1 B
/api-docs/mobile-stepper -- 1.93 kB -- -1 B
/api-docs/modal -- 2.42 kB -- -1 B
/api-docs/native-select -- 2.11 kB -- -1 B
/api-docs/no-ssr -- 1.3 kB -- -1 B
/api-docs/outlined-input -- 2.98 kB -- -1 B
/api-docs/pagination-item -- 1.97 kB -- -1 B
/api-docs/pagination -- 2.24 kB -- -1 B
/api-docs/paper -- 1.87 kB -- -1 B
/api-docs/popover -- 2.69 kB -- -1 B
/api-docs/popper -- 1.91 kB -- -1 B
/api-docs/portal -- 1.34 kB -- -1 B
/api-docs/radio-group -- 1.45 kB -- -1 B
/api-docs/radio -- 2.12 kB -- -1 B
/api-docs/rating -- 2.49 kB -- -1 B
/api-docs/root-ref -- 1.41 kB -- -1 B
/api-docs/scoped-css-baseline -- 1.4 kB -- -1 B
/api-docs/select -- 2.96 kB -- -1 B
/api-docs/skeleton -- 1.87 kB -- -1 B
/api-docs/slide -- 1.54 kB -- -1 B
/api-docs/slider -- 3.11 kB -- -1 B
/api-docs/snackbar-content -- 1.61 kB -- -1 B
/api-docs/snackbar -- 2.71 kB -- -1 B
/api-docs/speed-dial-action -- 2.04 kB -- -1 B
/api-docs/speed-dial-icon -- 1.55 kB -- -1 B
/api-docs/speed-dial -- 2.3 kB -- -1 B
/api-docs/step-button -- 1.63 kB -- -1 B
/api-docs/step-connector -- 1.54 kB -- -1 B
/api-docs/step-content -- 1.72 kB -- -1 B
/api-docs/step-icon -- 1.57 kB -- -1 B
/api-docs/step-label -- 1.9 kB -- -1 B
/api-docs/step -- 1.64 kB -- -1 B
/api-docs/stepper -- 1.84 kB -- -1 B
/api-docs/svg-icon -- 2.26 kB -- -1 B
/api-docs/swipeable-drawer -- 2 kB -- -1 B
/api-docs/switch -- 2.46 kB -- -1 B
/api-docs/tab-scroll-button -- 1.61 kB -- -1 B
/api-docs/tab -- 1.97 kB -- -1 B
/api-docs/table-body -- 1.47 kB -- -1 B
/api-docs/table-cell -- 2.13 kB -- -1 B
/api-docs/table-container -- 1.48 kB -- -1 B
/api-docs/table-footer -- 1.47 kB -- -1 B
/api-docs/table-head -- 1.46 kB -- -1 B
/api-docs/table-pagination -- 2.46 kB -- -1 B
/api-docs/table-row -- 1.69 kB -- -1 B
/api-docs/table-sort-label -- 1.83 kB -- -1 B
/api-docs/table -- 1.68 kB -- -1 B
/api-docs/tabs -- 2.68 kB -- -1 B
/api-docs/text-field -- 3.18 kB -- -1 B
/api-docs/textarea-autosize -- 1.13 kB -- -1 B
/api-docs/toggle-button-group -- 1.92 kB -- -1 B
/api-docs/toggle-button -- 1.78 kB -- -1 B
/api-docs/toolbar -- 1.65 kB -- -1 B
/api-docs/tooltip -- 2.56 kB -- -1 B
/api-docs/tree-item -- 1.88 kB -- -1 B
/api-docs/tree-view -- 1.92 kB -- -1 B
/api-docs/typography -- 2.59 kB -- -1 B
/api-docs/unstable-trap-focus -- 1.44 kB -- -1 B
/api-docs/zoom -- 1.52 kB -- -1 B
/blog/2019-developer-survey-results -- 6.35 kB -- -1 B
/blog/2019 -- 4.24 kB -- -1 B
/blog/2020-introducing-sketch -- 3.51 kB -- -1 B
/blog/2020-q1-update -- 4.33 kB -- -1 B
/blog/april-2019-update -- 3.13 kB -- -1 B
/blog/august-2019-update -- 2.24 kB -- -1 B
/blog/december-2019-update -- 2.37 kB -- -1 B
/blog/july-2019-update -- 2.13 kB -- -1 B
/blog/june-2019-update -- 2 kB -- -1 B
/blog/march-2019-update -- 2.53 kB -- -1 B
/blog/material-ui-v1-is-out -- 6.66 kB -- -1 B
/blog/material-ui-v4-is-out -- 9.68 kB -- -1 B
/blog/may-2019-update -- 2.35 kB -- -1 B
/blog/november-2019-update -- 2.75 kB -- -1 B
/blog/october-2019-update -- 2.5 kB -- -1 B
/blog/september-2019-update -- 2.68 kB -- -1 B
/company/about -- 1.74 kB -- -1 B
/company/contact -- 1.33 kB -- -1 B
/company/jobs -- 1.34 kB -- -1 B
/components/about-the-lab -- 6.8 kB -- -1 B
/components/alert -- 12.9 kB -- -1 B
/components/app-bar -- 30.2 kB -- -1 B
/components/autocomplete -- 110 kB -- -1 B
/components/avatars -- 9.2 kB -- -1 B
/components/backdrop -- 2.68 kB -- -1 B
/components/badges -- 15.4 kB -- -1 B
/components/bottom-navigation -- 6.25 kB -- -1 B
/components/box -- 8.05 kB -- -1 B
/components/breadcrumbs -- 14.7 kB -- -1 B
/components/button-group -- 7.61 kB -- -1 B
/components/buttons -- 26.4 kB -- -1 B
/components/cards -- 17.2 kB -- -1 B
/components/checkboxes -- 16.5 kB -- -1 B
/components/chips -- 22 kB -- -1 B
/components/click-away-listener -- 4.94 kB -- -1 B
/components/container -- 3.78 kB -- -1 B
/components/css-baseline -- 7.05 kB -- -1 B
/components/dialogs -- 43.1 kB -- -1 B
/components/dividers -- 12.8 kB -- -1 B
/components/drawers -- 31.5 kB -- -1 B
/components/expansion-panels -- 20.7 kB -- -1 B
/components/floating-action-button -- 10.9 kB -- -1 B
/components/grid-list -- 12 kB -- -1 B
/components/grid -- 32.4 kB -- -1 B
/components/hidden -- 10.6 kB -- -1 B
/components/icons -- 27.6 kB -- -1 B
/components/links -- 7.04 kB -- -1 B
/components/lists -- 26.5 kB -- -1 B
/components/material-icons -- 729 kB -- -1 B
/components/menus -- 25.2 kB -- -1 B
/components/modal -- 12.9 kB -- -1 B
/components/no-ssr -- 5.33 kB -- -1 B
/components/pagination -- 8.19 kB -- -1 B
/components/paper -- 3.49 kB -- -1 B
/components/pickers -- 39.3 kB -- -1 B
/components/popover -- 17.6 kB -- -1 B
/components/popper -- 22.5 kB -- -1 B
/components/portal -- 3.17 kB -- -1 B
/components/progress -- 21.2 kB -- -1 B
/components/radio-buttons -- 15.6 kB -- -1 B
/components/rating -- 11 kB -- -1 B
/components/selects -- 33.1 kB -- -1 B
/components/skeleton -- 13.2 kB -- -1 B
/components/slider -- 16.3 kB -- -1 B
/components/snackbars -- 22.4 kB -- -1 B
/components/speed-dial -- 14.6 kB -- -1 B
/components/steppers -- 36.9 kB -- -1 B
/components/switches -- 16.9 kB -- -1 B
/components/tables -- 174 kB -- -1 B
/components/text-fields -- 56.6 kB -- -1 B
/components/textarea-autosize -- 3.04 kB -- -1 B
/components/toggle-button -- 11.9 kB -- -1 B
/components/tooltips -- 17.5 kB -- -1 B
/components/transfer-list -- 9.68 kB -- -1 B
/components/transitions -- 12.6 kB -- -1 B
/components/tree-view -- 11.3 kB -- -1 B
/components/typography -- 9.96 kB -- -1 B
/components/use-media-query -- 12.9 kB -- -1 B
/customization/breakpoints -- 16.3 kB -- -1 B
/customization/color -- 20.9 kB -- -1 B
/customization/components -- 38.6 kB -- -1 B
/customization/default-theme -- 8.92 kB -- -1 B
/customization/density -- 9.73 kB -- -1 B
/customization/globals -- 5.23 kB -- -1 B
/customization/palette -- 14.1 kB -- -1 B
/customization/spacing -- 2.82 kB -- -1 B
/customization/theming -- 18.3 kB -- -1 B
/customization/typography -- 12.5 kB -- -1 B
/customization/z-index -- 3.47 kB -- -1 B
/discover-more/backers -- 3.03 kB -- -1 B
/discover-more/changelog -- 1.45 kB -- -1 B
/discover-more/languages -- 3.44 kB -- -1 B
/discover-more/related-projects -- 7.56 kB -- -1 B
/discover-more/roadmap -- 3.72 kB -- -1 B
/discover-more/showcase -- 15.1 kB -- -1 B
/discover-more/team -- 6.84 kB -- -1 B
/discover-more/vision -- 6.76 kB -- -1 B
/getting-started/example-projects -- 7.57 kB -- -1 B
/getting-started/faq -- 34.6 kB -- -1 B
/getting-started/installation -- 7.85 kB -- -1 B
/getting-started/learn -- 8.98 kB -- -1 B
/getting-started/support -- 9.15 kB -- -1 B
/getting-started/supported-components -- 6.74 kB -- -1 B
/getting-started/supported-platforms -- 6.1 kB -- -1 B
/getting-started/templates -- 8.92 kB -- -1 B
/getting-started/templates/album -- 5.57 kB -- -1 B
/getting-started/templates/blog -- 7.45 kB -- -1 B
/getting-started/templates/checkout -- 10.2 kB -- -1 B
/getting-started/templates/dashboard -- 8.86 kB -- -1 B
/getting-started/templates/pricing -- 7.79 kB -- -1 B
/getting-started/templates/sign-in-side -- 8.18 kB -- -1 B
/getting-started/templates/sign-in -- 8.42 kB -- -1 B
/getting-started/templates/sign-up -- 8.52 kB -- -1 B
/getting-started/templates/sticky-footer -- 1.54 kB -- -1 B
/getting-started/usage -- 9.6 kB -- -1 B
/guides/api -- 14.4 kB -- -1 B
/guides/composition -- 14.9 kB -- -1 B
/guides/flow -- 2.26 kB -- -1 B
/guides/interoperability -- 15.9 kB -- -1 B
/guides/localization -- 18.8 kB -- -1 B
/guides/migration-v0x -- 7.39 kB -- -1 B
/guides/migration-v3 -- 19.2 kB -- -1 B
/guides/minimizing-bundle-size -- 10 kB -- -1 B
/guides/responsive-ui -- 4.27 kB -- -1 B
/guides/right-to-left -- 5.24 kB -- -1 B
/guides/server-rendering -- 8.75 kB -- -1 B
/guides/testing -- 8.7 kB -- -1 B
/guides/typescript -- 15.1 kB -- -1 B
/performance/table-component -- 1.44 kB -- -1 B
/performance/table-emotion -- 8.49 kB -- -1 B
/performance/table-hook -- 2.24 kB -- -1 B
/performance/table-mui -- 4.5 kB -- -1 B
/performance/table-styled-components -- 2.6 kB -- -1 B
/premium-themes/onepirate -- 7.34 kB -- -1 B
/premium-themes/onepirate/forgot-password -- 1.01 kB -- -1 B
/premium-themes/onepirate/privacy -- 4.44 kB -- -1 B
/premium-themes/onepirate/sign-in -- 1.07 kB -- -1 B
/premium-themes/onepirate/sign-up -- 1.12 kB -- -1 B
/premium-themes/onepirate/terms -- 11.8 kB -- -1 B
/premium-themes/paperbase -- 7.67 kB -- -1 B
/production-error -- 2.87 kB -- -1 B
/styles/advanced -- 31.7 kB -- -1 B
/styles/api -- 16.9 kB -- -1 B
/styles/basics -- 16.5 kB -- -1 B
/system/api -- 5.96 kB -- -1 B
/system/basics -- 27.6 kB -- -1 B
/system/borders -- 4.1 kB -- -1 B
/system/display -- 6.55 kB -- -1 B
/system/flexbox -- 5.85 kB -- -1 B
/system/palette -- 4.35 kB -- -1 B
/system/positions -- 2.53 kB -- -1 B
/system/shadows -- 3.86 kB -- -1 B
/system/sizing -- 3.53 kB -- -1 B
/system/spacing -- 6.01 kB -- -1 B
/system/typography -- 4.42 kB -- -1 B
/versions -- 23 kB -- -1 B
docs:chunk:shared -- 65.8 kB -- -1 B
docs:shared:chunk/commons -- 5.99 kB -- -1 B
docs:shared:chunk/framework -- 42.3 kB -- -1 B
docs:shared:runtime/main -- 6.78 kB -- -1 B
docs:shared:runtime/webpack -- 1.24 kB -- -1 B
bundle Size Change Size Gzip Change Gzip
@material-ui/core -- 371 kB -- 102 kB
@material-ui/lab -- 217 kB -- 64.7 kB
@material-ui/styles -- 52.1 kB -- 15.6 kB
@material-ui/system -- 17.2 kB -- 4.52 kB
@material-ui/utils -- 7.19 kB -- 2.61 kB
Alert -- 87.5 kB -- 27.6 kB
AlertTitle -- 68.8 kB -- 21.5 kB
AppBar -- 68.6 kB -- 21.4 kB
Autocomplete -- 136 kB -- 42.7 kB
Avatar -- 69.7 kB -- 21.8 kB
AvatarGroup -- 70.8 kB -- 22.4 kB
Backdrop -- 73.2 kB -- 22.6 kB
Badge -- 69.9 kB -- 21.7 kB
BottomNavigation -- 66.9 kB -- 20.9 kB
BottomNavigationAction -- 79.6 kB -- 25.2 kB
Box -- 73.4 kB -- 22.2 kB
Breadcrumbs -- 84.7 kB -- 26.8 kB
Button -- 83.9 kB -- 25.7 kB
ButtonBase -- 78.1 kB -- 24.5 kB
ButtonGroup -- 87.6 kB -- 27 kB
Card -- 67.4 kB -- 21 kB
CardActionArea -- 79.2 kB -- 25 kB
CardActions -- 66.6 kB -- 20.8 kB
CardContent -- 66.5 kB -- 20.7 kB
CardHeader -- 69.6 kB -- 21.8 kB
CardMedia -- 66.9 kB -- 20.9 kB
Checkbox -- 86.3 kB -- 27.2 kB
Chip -- 86.9 kB -- 26.6 kB
CircularProgress -- 68.7 kB -- 21.6 kB
ClickAwayListener -- 4.13 kB -- 1.66 kB
Collapse -- 73.6 kB -- 22.7 kB
colorManipulator -- 4.14 kB -- 1.63 kB
Container -- 67.8 kB -- 21.1 kB
CssBaseline -- 66.5 kB -- 20.8 kB
Dialog -- 88.5 kB -- 27.7 kB
DialogActions -- 66.6 kB -- 20.8 kB
DialogContent -- 66.7 kB -- 20.8 kB
DialogContentText -- 68.6 kB -- 21.5 kB
DialogTitle -- 68.9 kB -- 21.6 kB
Divider -- 67.2 kB -- 21.1 kB
docs:/ -- 12.5 kB -- -1 B
docs:/_app -- 37.4 kB -- -1 B
Drawer -- 90.6 kB -- 27.6 kB
ExpansionPanel -- 77.2 kB -- 24.3 kB
ExpansionPanelActions -- 66.6 kB -- 20.8 kB
ExpansionPanelDetails -- 66.5 kB -- 20.7 kB
ExpansionPanelSummary -- 82.3 kB -- 26 kB
Fab -- 81 kB -- 25.3 kB
Fade -- 29 kB -- 9.67 kB
FilledInput -- 78.2 kB -- 24.2 kB
FormControl -- 69 kB -- 21.4 kB
FormControlLabel -- 70.1 kB -- 21.9 kB
FormGroup -- 66.5 kB -- 20.8 kB
FormHelperText -- 67.9 kB -- 21 kB
FormLabel -- 68 kB -- 21 kB
Grid -- 69.6 kB -- 21.8 kB
GridList -- 67 kB -- 21 kB
GridListTile -- 68.2 kB -- 21.3 kB
GridListTileBar -- 67.7 kB -- 21.2 kB
Grow -- 29.6 kB -- 9.88 kB
Hidden -- 70.6 kB -- 22.1 kB
Icon -- 67.4 kB -- 21 kB
IconButton -- 80.3 kB -- 25.1 kB
Input -- 77.1 kB -- 24 kB
InputAdornment -- 69.7 kB -- 21.9 kB
InputBase -- 75.2 kB -- 23.5 kB
InputLabel -- 69.9 kB -- 21.5 kB
LinearProgress -- 70 kB -- 21.6 kB
Link -- 71.2 kB -- 22.4 kB
List -- 66.8 kB -- 20.8 kB
ListItem -- 81.2 kB -- 25.4 kB
ListItemAvatar -- 66.6 kB -- 20.8 kB
ListItemIcon -- 66.7 kB -- 20.8 kB
ListItemSecondaryAction -- 66.5 kB -- 20.8 kB
ListItemText -- 69.6 kB -- 21.8 kB
ListSubheader -- 67.3 kB -- 21.1 kB
Menu -- 94.1 kB -- 29 kB
MenuItem -- 82.3 kB -- 25.8 kB
MenuList -- 70.5 kB -- 22 kB
MobileStepper -- 72.5 kB -- 22.7 kB
Modal -- 15.1 kB -- 5.27 kB
NativeSelect -- 81.6 kB -- 25.7 kB
NoSsr -- 2.18 kB -- 1.03 kB
OutlinedInput -- 79.2 kB -- 24.6 kB
packages/material-ui/material-ui.production.min.js -- 326 kB -- 94.7 kB
Pagination -- 88.7 kB -- 27.3 kB
PaginationItem -- 85 kB -- 26.2 kB
Paper -- 66.9 kB -- 20.8 kB
Popover -- 88.4 kB -- 27.3 kB
Popper -- 28.8 kB -- 10.3 kB
Portal -- 2.87 kB -- 1.29 kB
Radio -- 87.4 kB -- 27.6 kB
RadioGroup -- 68.4 kB -- 21.2 kB
Rating -- 75.4 kB -- 24.2 kB
RootRef -- 4.64 kB -- 1.76 kB
ScopedCssBaseline -- 67.4 kB -- 21 kB
Select -- 122 kB -- 36.1 kB
Skeleton -- 67.7 kB -- 21.3 kB
Slide -- 30.8 kB -- 10.1 kB
Slider -- 80.6 kB -- 25.6 kB
Snackbar -- 81.2 kB -- 25.4 kB
SnackbarContent -- 68.1 kB -- 21.3 kB
SpeedDial -- 91.3 kB -- 28.9 kB
SpeedDialAction -- 123 kB -- 39.1 kB
SpeedDialIcon -- 69.1 kB -- 21.6 kB
Step -- 67.2 kB -- 21 kB
StepButton -- 86.5 kB -- 27.3 kB
StepConnector -- 67.3 kB -- 21.1 kB
StepContent -- 74.8 kB -- 23.3 kB
StepIcon -- 69.2 kB -- 21.5 kB
StepLabel -- 73.1 kB -- 22.6 kB
Stepper -- 69.4 kB -- 21.8 kB
styles/createMuiTheme -- 22 kB -- 7.58 kB
SvgIcon -- 67.6 kB -- 21 kB
SwipeableDrawer -- 98.1 kB -- 30.7 kB
Switch -- 85.6 kB -- 26.8 kB
Tab -- 80.7 kB -- 25.6 kB
TabContext -- 2.65 kB -- 1.15 kB
Table -- 67.1 kB -- 21 kB
TableBody -- 66.7 kB -- 20.8 kB
TableCell -- 68.6 kB -- 21.5 kB
TableContainer -- 66.5 kB -- 20.7 kB
TableFooter -- 66.7 kB -- 20.8 kB
TableHead -- 66.7 kB -- 20.8 kB
TablePagination -- 149 kB -- 43.6 kB
TableRow -- 67 kB -- 21 kB
TableSortLabel -- 81.6 kB -- 25.8 kB
TabList -- 91.5 kB -- 29.2 kB
TabPanel -- 67.4 kB -- 21 kB
Tabs -- 90.3 kB -- 28.2 kB
TabScrollButton -- 81.1 kB -- 25.4 kB
TextareaAutosize -- 5.24 kB -- 2.19 kB
TextField -- 131 kB -- 38.3 kB
ToggleButton -- 80.3 kB -- 25.4 kB
ToggleButtonGroup -- 67.9 kB -- 21.2 kB
Toolbar -- 66.8 kB -- 20.9 kB
Tooltip -- 107 kB -- 33.9 kB
TreeItem -- 80.6 kB -- 25.6 kB
TreeView -- 72.9 kB -- 22.8 kB
Typography -- 68.2 kB -- 21.2 kB
Unstable_TrapFocus -- 3.85 kB -- 1.59 kB
useAutocomplete -- 14.5 kB -- 5.2 kB
useMediaQuery -- 2.57 kB -- 1.06 kB
useScrollTrigger -- 2.66 kB -- 1.08 kB
Zoom -- 29.1 kB -- 9.81 kB

Generated by 🚫 dangerJS against 8dda088

@oliviertassinari
Copy link
Member

@emretapci Yes, it's part of the tradeoff and why I was proposing a new prop to TabPanel.

@oliviertassinari oliviertassinari added the PR: needs revision The pull request can't be merged. More details is available on the code review or fails in the CI label May 29, 2020
@emretapci
Copy link
Contributor Author

@oliviertassinari what will this new prop do?

Copy link
Member

@eps1lon eps1lon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changes semantics. Before you wouldn't mount the children if the tabpanel wasn
't visible. Now you do.

It's not obvious that this is the better default.

@emretapci
Copy link
Contributor Author

In a component's render function, if you conditionally create a component, when that sub-component does not get created, its state is lost. In the current case of the tab demo, if the tab panel is not visible, its children are not rendered. So, its state is lost. Since ReactJS is a declarative system, maybe we should avoid rendering components conditionally, especially if they hold a state that needs to be retained. Nevertheless, it took some of my time to notice this fact, since I am a newbie in React :)

@eps1lon
Copy link
Member

eps1lon commented May 29, 2020

I'm aware that state is lost. It's still not clear that this is the correct approach since you now render all tab panels which could be considered wasteful. If you want to persist state you could always lift it up and put into context or whatever you prefer for state managment.

In the future React will likely provide better support for offscreen rendering. For this demo conditional rendering is sufficient. Though we might want to add an explainer why the current behavior was chosen and how to deal with stateful tab panels.

@oliviertassinari
Copy link
Member

oliviertassinari commented May 30, 2020

@eps1lon I would propose we move the focus of this pull request from the demos to a focus on @material-ui/lab/TabPanel. I'm happy to move it to a new issue if more appropriate. I also think that we could update all the tabs demos to use the new lab components.

Using the following benchmark list https://trello.com/c/JM6Zh3YW/2642-tabs (using the same one that previously), I could find the following behaviors:

  1. hidden prop with full rendering and no option to disable it https://github.com/reach/reach-ui/blob/115eb680bae13e7e097c9a6cd3047c06530ee880/packages/tabs/src/index.tsx#L643
  • Reach UI
  • Reakit
  • Garden
  • Chakra
  • React Bootstrap
  1. lazy render the content of the tab panels, keep them mounted when moving to a different tab
  • Antd (plus a forceRender prop to render all the panels)
  1. only render the active tab panel
  • Base Web (plus a renderAll prop to render all the panels)
  • Material-UI
  • JetBrains
  • Semantic UI
  • AltasKit
  • Polaris
  1. render in two passes, first the active panel, then all the panels
  • react-swipeable-views

In the future React will likely provide better support for offscreen rendering

This echo to oliviertassinari/react-swipeable-views#453 (comment).

Rendering all the tab panels reduces the time it takes to switch to a different tab panel but increases the initial mount. What do you guys think about going with 4, plus an option to only render the active panel (it can be useful to reduce the SSR output, even with low priority rendering of the hidden attribute)?

@eps1lon
Copy link
Member

eps1lon commented May 30, 2020

What do you guys think about going with 4, plus an option to only render the active panel

I don't see how this relates to a docs PR.

@oliviertassinari
Copy link
Member

oliviertassinari commented May 30, 2020

I don't see how this relates to a docs PR.

@eps1lon I believe we are discussing what should the tab panel mounting behavior be. @emretapci's problem is about persisting state between panels, he has proposed to change the documentation to account for his case. I think that we need to be aware of the other constraints before making any change. In addition to the state persistence concern, I think that the performance is also a legit problem to take into account. I'm opening a new issue: #21250.

@oliviertassinari oliviertassinari added docs Improvements or additions to the documentation and removed PR: needs revision The pull request can't be merged. More details is available on the code review or fails in the CI labels Jun 4, 2020
@oliviertassinari oliviertassinari changed the title to avoid re-render of tab components [Tabs] Broader usage of the tab panel API Jun 4, 2020
@oliviertassinari oliviertassinari changed the title [Tabs] Broader usage of the tab panel API [docs] List all the Tab components under the API section Jun 5, 2020
@oliviertassinari oliviertassinari merged commit 1761fad into mui:master Jun 5, 2020
@oliviertassinari
Copy link
Member

oliviertassinari commented Jun 5, 2020

@emretapci I have updated your pull request with a small change related to the documentation. I hope it will help in this problem: making the lab API more visible might increase usage, which in turn, might drive developers to #21250 and your problem. Thanks for raising your voice.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: tabs This is the name of the generic UI component, not the React module! docs Improvements or additions to the documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants