Моя команда использует библиотеку React MaterialUI . Чтобы обеспечить согласованный шаблон пользовательского интерфейса и упростить для нас настройку компонента MaterialUI, мы заключаем каждый компонент MaterialUI в свой собственный компонент. Например:
const style = {} // our project custom style for ListItemText
const OurListItemText = ({primary, secondary, classes}: Props) => (
<MuiListItemText
primary={primary}
secondary={secondary}
className={classes.text}
/>
) // we only expose primary and secondary props of the original MuiListItemText.
// Team members are blocked from customising other MUIListItemText's props
export default withStyles(styles)(OurListItemText)
MuiListItemText
является исходным MaterialUI компонентом, в то время как OurListItemText
является нашим компонентом оболочки. В нашем проекте разрешено использовать только только OurListItemText
.
Как показано выше, OurListItemText
не делает ничего, кроме пересылки реквизита на MuiListItemText
. Однако это сильно влияет на производительность:

ListItemText
полоса сверху - от OurListItemText
, а нижняя - от MuiListItemText
. Если мы используем MuiListItemText
напрямую, это может быть на ~ 50% быстрее (мы пробовали), что заметно, когда у нас 100 ListItemText
. Удаление withStyles
HOC немного улучшается, но незначительно.
ListItemText
- это только один пример, у нас аналогичные проблемы с производительностью для других упакованных компонентов. (2 Typography
на приведенном выше графике - это еще одна пара наших компонентов-обертки и оригинального компонента MUI)
Как улучшить производительность этих простых компонентов props-forwarding?