Material-ui: рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдорд╛рд░реНрдЪ 2018  ┬╖  93рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рднрдпрд╛рдирдХ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдирдП рдРрдк рдореЗрдВ рдПрдХ рджрд░рд╛рдЬ рдЬреЛрдбрд╝рд╛ред рдЕрдзрд┐рдХрддрд░, рдореИрдВрдиреЗ рджрд░рд╛рдЬ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреЙрдкреА рдХрд┐рдпрд╛ред рд╕рд┐рд░реНрдл PoC I рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛

        <Divider />
        <List>{mailFolderListItems}</List>

рдЕрдиреБрднрд╛рдЧред

рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ (рдиреЗрдХреНрд╕рд╕ 4, рдХреЙрд░реНрдбреЛрд╡рд╛ рд╡рд┐рдж рдХреНрд░реЙрд╕рд╡реЙрдХ 20)ред рдореИрдВ рджреЗрд╡ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдб рдореЛрдб рдЕрдзрд┐рдХ рдЧрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╡ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП mailFolderListItems рдореЗрдВ рдШрдЯрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореЗрдиреВ рдореЗрдВ рднреА рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ {mailFolderListItems} рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ 50-60ms рддрдХ рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

const modalProps = {
    keepMounted: true, // Better open performance on mobile.
};

рдЕрдиреНрдп рдРрдк рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ mailFolderListItems рдХреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рд░реАрд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛:

class MailFolderListItems extends React.Component<{}, {}> {

    shouldComponentUpdate() {
        return false;
    }

    render() {
        return (
            <List>
                <Link to={Routes.Startpage.path}>
                    <ListItem>
                        <ListItemIcon>
                            <InboxIcon />
                        </ListItemIcon>
[...]


                <Divider />
                <MailFolderListItems />

рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ https://github.com/mui-org/material-ui/issues/5628 рдорд┐рд▓рд╛ред рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ ред рдкреНрд░рджрд░реНрд╢рди рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП shouldComponentUpdate рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдореМрд▓рд┐рдХ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рд╣реИред PureComponent рд╕рдмрд╕реЗ рдЖрдо рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ WithStyles рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп (рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП 1-2ms рдФрд░ рдЕрдзрд┐рдХ) рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • [x] рдореИрдВрдиреЗ рдЗрд╕ рднрдВрдбрд╛рд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдореИрдВ рдЗрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рдРрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо (рдмрдЧ рдХреЗ рд▓рд┐рдП)

рдореИрдВ рдЕрднреА рддрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рдШрдЯрдХ рдбреЗрдореЛ рдкреГрд╖реНрда рд╕реЗ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдбреЗрдореЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рджрд░реНрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдХрд╛рд░рдХ> = 5x рджреНрд╡рд╛рд░рд╛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

| рдЯреЗрдХ | рд╕рдВрд╕реНрдХрд░рдг |
|--------------|---------------|
| рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ | 1.0.0-рдмреАрдЯрд╛.38 |
| рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдкреНрд░рддреАрдХ | 1.0.0-рдмреАрдЯрд╛.36 |
| рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ | 16.2.0 |
| рдмреНрд░рд╛рдЙрдЬрд╝рд░ | рдХреЙрд░реНрдбреЛрд╡рд╛ рдХреНрд░реЙрд╕рд╡реЙрдХ 20 (рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд░реЛрдо 50 рдХреЗ рдмрд░рд╛рдмрд░) |

discussion performance

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@oliviertassinari рдПрдХ рдорд╣рд╛рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ _рдЕрдкрдиреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдиреНрдпрддрд╛рдУрдВ_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рддрдереНрдп рддрдереНрдп рдФрд░ _no_ рдзрд╛рд░рдгрд╛рдПрдВред

рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдореИрдВ 10 рдмрдЯрди рдХрдо рдХрд░рддрд╛ рд╣реВрдБред 10! рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╕реЗ рдХреЛрдИ рднреА 10 рдШрдЯрдХ (рдмрджрддрд░: рдХрдВрдЯреЗрдирд░) рдкреВрд░реЗ рдРрдк рдХреЛ рддрдм рддрдХ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдРрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рди рд╣реЛ ! рдмрд┐рдирд╛ рдХрд┐рд╕реА рдереНрд░реЙрдЯрд▓ рдХреЗ рдХреНрд░реЙрд╕рд╡реЙрдХ 21/рдХреНрд░реЛрдо 51 рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛:

рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди:
image

рдкреНрдпреЛрд░рдмрдЯрди:
image

рдпрд╣ рдЕрднреА рднреА рдПрдХ 8x рд╕реБрдзрд╛рд░ рд╣реИ! рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ! рдХреНрдпрд╛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?

100 рдмрдЯрди рдХреА рдЬрдЧрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреЗрдЬ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ 10 рдмрдЯрди рдорд┐рд▓реЗрдВрдЧреЗред рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ 10 рдЧреНрд░рд┐рдб, 10 X, рдЖрджрд┐ рдорд┐рд▓реЗрдВрдЧреЗред

рдореИрдВрдиреЗ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ! рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-ui рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрд┐рдВрджреБ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдЕрдм, рдРрдкрдмрд╛рд░, рдЯреВрд▓рдмрд╛рд░, рд╕реВрдЪреА, рджрд░рд╛рдЬ рдЬреИрд╕реЗ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ! рдпрд╣ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИ! рдЖрдкрдХреЛ рд╣рд░ рдкреЗрдЬ рдкрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА 20 рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕/рдХрдВрдЯреЗрдирд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреЗрд╕реНрдХрдЯреЙрдк/рдореИрдХ рдкрд░ рдХрд┐рд╕реА рднреА рдзреАрдореЗрдкрди рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдзреАрдореА рдирд╣реАрдВ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓, рдкрд┐рдЫрд▓реЗ рдФрд░ рдирдП рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдмреАрдЪ рдХреА рдЬрд╛рдБрдЪ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрдЧреАред рдЖрдк CPU рдЪрдХреНрд░ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрдВрдЧреЗред рддреЛ x13 -> x0.8

рдореБрдЭреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓ рд▓рд╛рдЧреВ рд╕рдВрджрд░реНрдн рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреНрдп рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрдЯрди рдХреЗ рд▓рд┐рдП 2,27ms рддрдХ рдЦрдкрдд рд╣реЛрддреА рд╣реИред 8 рдШрдЯрдХ рдФрд░ рдЖрдк 60fps рд╕реЗ рдХрдо рд╣реИрдВред

рд╕рднреА 93 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@Bessonov рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдлреЛрдХрд╕ рдкреЛрд╕реНрдЯ v1 рд░рд┐рд▓реАрдЬ рд╣реЛрдЧрд╛ред рд╣рдордиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореВрд▓ рднрд╛рдЧ рдХреЛ рдпрдерд╛рд╢реАрдШреНрд░ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ +90% рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо, рдЕрдм рддрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рд╣реИред рдЖрдкрдиреЗ рдХреЛрдИ рдмрд╛рд╣рд░реА рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдкрд░ рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдпрджрд┐ рдЖрдк рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреА рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓ рд╕реАрдорд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдкреНрд░рдЬрдирди рдХреЛрдб рдФрд░ рдмреЙрдХреНрд╕ рдпрд╛ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде), рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдмрдврд╝рд╛рдПрдВред рддрдм рддрдХ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

@oliviertassinari рдЖрдкрдХреА рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ +90% рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо, рдЕрдм рддрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рд╣реИред

рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ - рд╣рд╛рдБ, рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рд╣реИред рдмрд╕ рджрд░рд╛рдЬ рдФрд░ рдХреБрдЫ рдмрдЯрди рдРрдк рдХреЛ рд╕реБрд╕реНрдд рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЙрддреНрддрд░рджрд╛рдпреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЕрдзрд┐рдХ рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдиреЗ рдХреЛрдИ рдмрд╛рд╣рд░реА рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдкрд░ рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдард╛рдП рдЧрдП рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдк рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреА рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓ рд╕реАрдорд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдкреНрд░рдЬрдирди рдХреЛрдб рдФрд░ рдмреЙрдХреНрд╕ рдпрд╛ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде)

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рд╢реБрджреНрдз рдФрд░ рдЕрд╢реБрджреНрдз рдШрдЯрдХ рдХреА рддреБрд▓рдирд╛ рд╣реИред рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рдЪрд░рдг рд╣реИрдВ:

  1. рдХреНрд░реЛрдо рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ https://codesandbox.io/s/r1ov818nwm . рдкрд░
  2. рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд┐рдВрдбреЛ рдореЗрдВ "рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  3. рджреЗрд╡ рдЙрдкрдХрд░рдг рдЦреЛрд▓реЗрдВ рдФрд░ "рдкреНрд░рджрд░реНрд╢рди" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ
  4. рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реАрдкреАрдпреВ рдХреЛ рдХрдо рд╕реЗ рдХрдо 5x (рдЖрдкрдХреЗ рдкреАрд╕реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - 10x рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рддрдХ рдереНрд░реЙрдЯрд▓ рдХрд░реЗрдВ
  5. рдмрд░реНрдЧрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкрд┐рдЫрдбрд╝рддрд╛ рд╣реИред

рдФрд░ рдЕрдм:

  1. index.js
  2. pure рдХреЛ true рдмрджрд▓реЗрдВ
  3. рд╕рд╣реЗрдЬреЗрдВ
  4. рдКрдкрд░ рд╕реЗ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ
  5. рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реВрдЪреА рддрддреНрд╡ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ "рдорд╣рд╕реВрд╕" рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИ WithStyles ред рдпрд╣ рд╕реАрдкреАрдпреВ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рд╣реИред рдореИрдВ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

WithStyles(ListItem) :
image

ListItem :
image

рдЕрдВрддрд░ рдХреЗрд╡рд▓ ListItem рдШрдЯрдХ рдХреЗ рд▓рд┐рдП 1.26 рдПрдордПрд╕ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ 13 рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдм рдЖрдк 60fps рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдЕрд╡рдзрд┐ рд╣рдореЗрд╢рд╛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдБ рд╢реБрджреНрдз рдФрд░ рдЧреИрд░ рд╢реБрджреНрдз рдШрдЯрдХ рдХреА рддреБрд▓рдирд╛ рд╣реИ

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ PureComponent рд╕рднреА рдкреНрд░рджрд░реНрд╢рди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣рддрд╛ рд╣реВрдВ, рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреЗрд╡рд▓ ListItem рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ 1.26 рдПрдордПрд╕ рд╣реИред

@Bessonov рдПрдХ рд╣реА рдШрдЯрдХ рдХреЗ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП WithStyles рдШрдЯрдХ рдмрд╣реБрдд рд╕рд╕реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ CSS рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд░рд┐рдПрдХреНрдЯ рдХреА рд╕реАрдорд╛рдУрдВ рдФрд░ рдЙрдЪреНрдЪ рдХреНрд░рдо рдХреЗ рдШрдЯрдХреЛрдВ рдХреА рд▓рд╛рдЧрдд рддрдХ рдкрд╣реБрдБрдЪ рд░рд╣реЗ рд╣реЛрдВред
рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддрддреНрд╡ рд╕рдВрд╕реНрдорд░рдг рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрд▓рд╛ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрднреА рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд┐рдВрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдареАрдХ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЖрдк рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ - shouldComponentUpdate рдЕрдиреБрдХреВрд▓рди?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рднрд╛рдЧ рд▓рдЧрднрдЧ shouldComponentUpdate рдФрд░ рджреВрд╕рд░рд╛ рднрд╛рдЧ WithStyles , рдпрджрд┐ рдореИрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИ?

рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПрдХрдВрдкреЛрдиреЗрдВрдЯрдЕрдкрдбреЗрдЯ

@Bessonov рд╣рдо рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдкрдХреНрд╖ рдкрд░ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХ

  1. рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдШрдЯрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдкрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рд╕рдВрджрд░реНрдн рдкрд░рд┐рд╡рд░реНрддрди, рддрд░реНрдХ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдкреАрдпреВ рдЪрдХреНрд░реЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрддрд╛ рд╣реИред
  2. рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реА рдХреА рдЬрдбрд╝ рд╕реЗ shouldComponentUpdate рддрд░реНрдХ рдЬрд┐рддрдирд╛ рдХрд░реАрдм рд╣реЛрдЧрд╛, рд╡рд╣ рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЖрдк рдкреЗрдбрд╝ рдкрд░ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рдЫрдВрдЯрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдШрдЯрдХ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рдХрдо рдЙрддреНрддреЛрд▓рди рдЕрд╡рд╕рд░ред

рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЖрдЗрдХрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдирдП рд▓реЛрдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

WithStyles рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рднрд╛рдЧ

рд╡рд┐рдерд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдХрд╛ 90% рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕ рдореЗрдВ рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдкрдХреНрд╖ рдкрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдо рд╕реЗ рдХрдо, рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреИрд╢рд┐рдВрдЧ рдЕрд╡рд╕рд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХреЗред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╣реИред

рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдШрдЯрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдкрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рд╕рдВрджрд░реНрдн рдкрд░рд┐рд╡рд░реНрддрди, рддрд░реНрдХ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдкреАрдпреВ рдЪрдХреНрд░реЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЦреБрдж рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рд╣реА рдШрдЯрдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд shouldComponentUpdate (рдЙрдерд▓реА рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде) рдЕрдиреБрдХреВрд▓рд┐рдд рдШрдЯрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдЦрд░реНрдЪреАрд▓рд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП (рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп.рдЬреЗрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ)ред рд╕рдВрдмрдВрдзрд┐рдд рдЯрд┐рдХрдЯ: https://github.com/mui-org/material-ui/issues/4305

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/mui-org/material-ui/blob/v1-beta/docs/src/pages/demos/drawers/PermanentDrawer.js#L68 рдореЗрдВ рдпрд╣ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ PureComponent рдмрдирд╛рддрд╛ рд╣реИ

        classes={{
          paper: classes.drawerPaper,
        }}

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд╣реАрдВ:

const drawerClasses = {
    paper: classes.drawerPaper,
};
[...]
        classes={drawerClasses}

рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╣реАред

рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реА рдХреА рдЬрдбрд╝ рд╕реЗ shouldComponentUpdate рддрд░реНрдХ рдЬрд┐рддрдирд╛ рдХрд░реАрдм рд╣реЛрдЧрд╛, рд╡рд╣ рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЖрдк рдкреЗрдбрд╝ рдкрд░ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рдЫрдВрдЯрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╣рд╛рдБ рдпрд╣ рд╕рдЪ рд╣реИред

рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдШрдЯрдХ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рдХрдо рдЙрддреНрддреЛрд▓рди рдЕрд╡рд╕рд░ред

рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк https://codesandbox.io/s/r1ov818nwm рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рд╕рд┐рд░реНрдл List рдХреЛ PureComponent рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВред рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рджрд░рд╛рдЬ рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рджрд╛рд╡рд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╣рд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬреЛ {this.props.children} ред рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдбреЗрдореЛ рдмрдирд╛рдпрд╛: https://codesandbox.io/s/my7rmo2m4y

рдХреЗрд╡рд▓ 101 рдмрдЯрди (рд╢реБрджреНрдз = рдЕрд╕рддреНрдп) рдФрд░ рдкреНрдпреЛрд░рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдмрдЯрди рд╣реИрдВ (рд╢реБрджреНрдз = рд╕рддреНрдп, рджреЗрдЦреЗрдВ рдХрд┐ рдмрдЯрди рдХрд╣рд╛рдБ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдПрдХ рд╣реА рдЦреЗрд▓ рдкрд░рд┐рдгрд╛рдо, рдЕрдЧрд░ рдореИрдВ "рдХреНрд▓рд┐рдХ" -рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ:

рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди:
image

рд▓рдкреЗрдЯрд╛ рд╣реБрдЖ рдмрдЯрди (рдУрд╡рд░рд╣реЗрдб рд╡рдЧреИрд░рд╣ рдХреЗ рд╕рд╛рде):
image

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди рдХреЗ рд▓рд┐рдП 637ms тАЛтАЛрдмрдирд╛рдо 47ms рд╣реИ! рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ shouldComponentUpdate (рдпрд╛ рд╕рд┐рд░реНрдл PureComponent ) рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ? :)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВ

@oliviertassinari @oreqizer рдореИрдВрдиреЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рджреЗрдЦреАред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PureComponent рд╕рд╛рде Component рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ

  shouldComponentUpdate() {
    return false;
  }

image

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди рдХреЗ рд▓рд┐рдП 637ms тАЛтАЛрдмрдирд╛рдо 47ms рд╣реИ! рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ shouldComponentUpdate (рдпрд╛ рд╕рд┐рд░реНрдл PureComponent) рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ? :)

@ рдмреЗрд╕реЛрдиреЛрд╡ рдпрд╣ рд╢реБрджреНрдз рддрд░реНрдХ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рд╛рдБ, рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рдпрд╣ рдПрдХ x13 рд╕реБрдзрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдХрд░реАрдм рд╣реИ:

  • 100 рдмрдЯрди рдХреА рдЬрдЧрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреЗрдЬ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ 10 рдмрдЯрди рдорд┐рд▓реЗрдВрдЧреЗред рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ 10 рдЧреНрд░рд┐рдб, 10 X, рдЖрджрд┐ рдорд┐рд▓реЗрдВрдЧреЗред
  • рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рд░рд▓ рдЧреБрдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓ рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдкрд┐рдЫрд▓реЗ рдФрд░ рдирдП рдкреНрд░реЛрдк рдХреЗ рдмреАрдЪ рдХреА рдЬрд╛рдВрдЪ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрдЧреАред рдЖрдк CPU рдЪрдХреНрд░ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрдВрдЧреЗ ред рддреЛ x13 -> x0.8 рдпрд╛ рддреЛ

@oliviertassinari рдПрдХ рдорд╣рд╛рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ _рдЕрдкрдиреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдиреНрдпрддрд╛рдУрдВ_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рддрдереНрдп рддрдереНрдп рдФрд░ _no_ рдзрд╛рд░рдгрд╛рдПрдВред

рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдореИрдВ 10 рдмрдЯрди рдХрдо рдХрд░рддрд╛ рд╣реВрдБред 10! рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╕реЗ рдХреЛрдИ рднреА 10 рдШрдЯрдХ (рдмрджрддрд░: рдХрдВрдЯреЗрдирд░) рдкреВрд░реЗ рдРрдк рдХреЛ рддрдм рддрдХ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдРрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рди рд╣реЛ ! рдмрд┐рдирд╛ рдХрд┐рд╕реА рдереНрд░реЙрдЯрд▓ рдХреЗ рдХреНрд░реЙрд╕рд╡реЙрдХ 21/рдХреНрд░реЛрдо 51 рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛:

рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди:
image

рдкреНрдпреЛрд░рдмрдЯрди:
image

рдпрд╣ рдЕрднреА рднреА рдПрдХ 8x рд╕реБрдзрд╛рд░ рд╣реИ! рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ! рдХреНрдпрд╛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?

100 рдмрдЯрди рдХреА рдЬрдЧрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреЗрдЬ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ 10 рдмрдЯрди рдорд┐рд▓реЗрдВрдЧреЗред рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ 10 рдЧреНрд░рд┐рдб, 10 X, рдЖрджрд┐ рдорд┐рд▓реЗрдВрдЧреЗред

рдореИрдВрдиреЗ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ! рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-ui рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрд┐рдВрджреБ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдЕрдм, рдРрдкрдмрд╛рд░, рдЯреВрд▓рдмрд╛рд░, рд╕реВрдЪреА, рджрд░рд╛рдЬ рдЬреИрд╕реЗ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ! рдпрд╣ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИ! рдЖрдкрдХреЛ рд╣рд░ рдкреЗрдЬ рдкрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА 20 рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕/рдХрдВрдЯреЗрдирд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреЗрд╕реНрдХрдЯреЙрдк/рдореИрдХ рдкрд░ рдХрд┐рд╕реА рднреА рдзреАрдореЗрдкрди рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдзреАрдореА рдирд╣реАрдВ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓, рдкрд┐рдЫрд▓реЗ рдФрд░ рдирдП рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдмреАрдЪ рдХреА рдЬрд╛рдБрдЪ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрдЧреАред рдЖрдк CPU рдЪрдХреНрд░ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрдВрдЧреЗред рддреЛ x13 -> x0.8

рдореБрдЭреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓ рд▓рд╛рдЧреВ рд╕рдВрджрд░реНрдн рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреНрдп рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрдЯрди рдХреЗ рд▓рд┐рдП 2,27ms рддрдХ рдЦрдкрдд рд╣реЛрддреА рд╣реИред 8 рдШрдЯрдХ рдФрд░ рдЖрдк 60fps рд╕реЗ рдХрдо рд╣реИрдВред

рдЖрдк рдЕрдкрдиреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рддрдереНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдзрд╛рд░рдгрд╛ рд╣реИ? рдореИрдВ рдЖрд▓реЛрдЪрдирд╛рддреНрдордХ рд╕реЛрдЪ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХрд▓реНрдкрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрдк рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╢реБрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЧреИрд░ рд╢реБрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреБрдЫ рдЫреАрдирдирд╛ рд╣реЛрдЧрд╛ред #5628 рдпрд╛ https://github.com/react-bootstrap/react-bootstrap/issues/633#issuecomment -234749417 рдпрд╛ https://github.com/reactstrap/reactstrap/pull/771#issuecomment -375765577 рдХреЗ рд╕рдорд╛рди рддрд░реНрдХ

рд╢реБрджреНрдз рдХреЗ рд╕рд╛рде:
capture d ecran 2018-03-27 a 11 43 41

рд╢реБрджреНрдз рдХреЗ рдмрд┐рдирд╛:
capture d ecran 2018-03-27 a 11 44 15

рдкреНрд░рдЬрдирди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред

  • https://codesandbox.io/s/715p7661k1 рдЦреЛрд▓реЗрдВ
  • рдХреНрд░реЛрдо рдкрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╢реБрд░реВ рдХрд░реЗрдВред
  • рд░реЗрдВрдбрд░ рдмрдЯрди рдкрд░ 5 рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

@oliviertassinari рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВ:

рд╢реБрджреНрдз рдХреЗ рдмрд┐рдирд╛ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдереНрд░реЙрдЯрд▓ рдХреЗ рдмрд┐рдирд╛ рднреА рдпрд╣ рдзреАрдорд╛ рд╣реИ):
image

рд╢реБрджреНрдз (рд╕рдЪ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдФрд░ рдореБрдЭреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдпреВрдЖрд░рдПрд▓ рдорд┐рд▓рддрд╛ рд╣реИ):
image

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЗ рдШрдЯрдХ рднреА "рд╢реБрджреНрдз" рд╣реИрдВ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдмрд┐рдВрджреБ рджреЗрдЦрддрд╛ рд╣реВрдБред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИред рдПрдХ рддрд░рдл рддреЛ рдордЯреЗрд░рд┐рдпрд▓-рдпреВрдЖрдИ "рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд▓рдЪреАрд▓рд╛" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП , рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рд╡рд░реНрддрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдЗрд╕реЗ _unusable_ рдмрдирд╛рддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдХрд╛ рд╢реБрджреНрдз рдФрд░ рдЧреИрд░-рд╢реБрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕реЗ рдЕрдм рдЕрдкрдиреЗ рдРрдк рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рднреА рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред

@Bessonov рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдорд╛рдлрд╝ рдХрд░рдирд╛ред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдВрддрд░ рдЧрд╛рдпрдм рдерд╛ред рдореИрдВрдиреЗ рд▓рд┐рдВрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ:

<Button>
+ <i>
    Button
+ </i>
</Button>

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдЪрд╛рд░реНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧреИрд░-рд╢реБрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рдзреАрдорд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдареАрдХ рд╣реИ, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБред рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ...

рдареАрдХ рд╣реИ, рдореИрдВ рдЕрдм рд╕рдордЭ рдЧрдпрд╛ред рдмрд╕ рд╡рд╣реА "рд╣рд░ рд░реЗрдВрдбрд░ рдкрд░ рдирдИ рд╡рд╕реНрддреБ" -рдерд┐рдВрдЧред рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЯреНрд░рдл рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ! :D рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИ (рдЖрдкрдиреЗ ~ 7% рджрд┐рдЦрд╛рдпрд╛), рдпрд╣ рдЕрднреА рднреА рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рдХреБрдЫ рдЦрд╛рдорд┐рдпреЛрдВ рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред рдореИрдВрдиреЗ рдЕрдм рдкреНрдпреЛрд░ рд░реИрдкрд░ + рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди + рдкреНрд░реЛрдбрдХреНрд╢рди рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЙрд╕реА рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рддреЗрдЬрд╝ рд╣реИ!

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ (рд░реИрдкрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ) рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдХрдорд┐рдпреЛрдВ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред рдпрд╛ рдмреЗрд╣рддрд░: рдореИрдВ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдареАрдХ рд╣реИ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рдЗрдирдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЦреБрдж рдХреЗ рд░реИрдкрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ)

рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░рд┐рдПрдХреНрд╢рди-рд╕реНрдерд┐рд░-рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реВрдХреНрд╖реНрдо рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдк рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрддрдирд╛ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ <Add /> рдЬреИрд╕реЗ рд╕рднреА рдПрд╕рд╡реАрдЬреА-рд╢реИрд▓реА рдЖрдЗрдХрди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ (рд╕рд╛рдЗрдб рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, "рд░рд┐рдПрдХреНрд╢рди-рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ" рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ рдФрд░ "рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░рд┐рдПрдХреНрд╢рди-рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ-рдПрд▓рд┐рдореЗрдВрдЯреНрд╕" рдкрд░ рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • рд╕рд░рд▓ рд╕реНрдерд┐рд░ InputAdornment рдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛рдпред
  • рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдЙрд╕ рдкрд░ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдЕрдм рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  • рдФрд░ рдЬрдмрдХрд┐ InputAdornment рдЕрдм рд╕реНрд╡рдпрдВ рдлрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, InputProps={{startAdornment: ...}} рдЕрднреА рднреА рдЗрдирд▓рд╛рдЗрди рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ PureComponent рдХреЛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред
  • рдЗрд╕реА рддрд░рд╣ classes={{label: classes.runButtonLabel}} PureComponent рдХреЗ рд▓рд┐рдП рд░рди рдмрдЯрди рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ PureComponent рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдордпреВрдЖрдИ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрдпреЛрд░рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

  • *Props рдкреНрд░реЙрдкреНрд╕ рдЬреИрд╕реЗ InputProps рдПрдордпреВрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдореВрд▓рднреВрдд рдкреИрдЯрд░реНрди рд╣реИред рдпрд╣ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдПрдордпреВрдЖрдИ рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдиреНрдирдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреИрдЯрд░реНрди рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рднреА рдкрддреНрддреЗ рдХреЗ рдШрдЯрдХ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢реБрджреНрдз рдореЛрдб рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред
  • рдЗрд╕реА рддрд░рд╣ classes={{...}} рдкреИрдЯрд░реНрди рднреА PureComponent рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ MUI рдореЗрдВ рдЪреАрдЬреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕реНрдЯрд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред (рдФрд░ classes={classes} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рдкрд╛рд╕ рдШрдЯрдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ classes рдореЗрдВ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдПрдХ рд╣реА рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдореЗрдВ)
  • рдмрдЪреНрдЪреЛрдВ рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 1 рдШрдЯрдХ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдЕрдХреНрд╕рд░ 2-3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдореВрд▓рднреВрдд рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╢реБрджреНрдз рдореЛрдб рдПрдордпреВрдЖрдИ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рджреЛ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рдо рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛рдж рд░рдЦрдирд╛ рдпрд╛ рдлрд╣рд░рд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ

  1. рдПрдХ рддрд░рд╣ рд╕реЗ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ shallowMemoize рд╕реЗ рдХреБрдЫ рдХрдо рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрдерд╛рдиреАрдп this рдФрд░ key рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ (рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдЯреНрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ) рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рддрдм рддрдХ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИ рдЬрдм рддрдХ рдпрд╣ рдЙрдерд▓рд╛ рдмрд░рд╛рдмрд░ рд╣реИ
  2. рдПрдХ рдФрд░ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ред
  3. shallowMemoize рдХреЛ 1 рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде render() рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рддрд░рд╣ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ key рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд░реЗрдВрдбрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдпрд╛рджрдЧрд╛рд░ рд╡рд╕реНрддреБ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╕рднреА рдкреБрд░рд╛рдиреЗ рдорд╛рдиреЛрдВ рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдВред

рдмреЗрд╢рдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рдЧрдиреНрджрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддрд░реНрдХ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рдлрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

import {createSelector} from 'reselect';

class FormPage extends PureComponent {
  state = { example: '' };

  change = e => this.setState({example: e.target.value});
  submit = () => {
    console.log('Submit: ', this.state.example);
  };

  runButtonClasses = createSelector(
    props => props.classes.runButtonLabel,
    runButtonLabel => ({runButtonLabel}));

  render() {
    const {title} = this.props;
    const {example} = this.state;

    return (
      <form>
        {title}
        <TextField
          InputProps={this.shallowMemoize('a', {
            // This example assumes use of transform-react-constant-elements to make this object always the same
            startAdornment: <InputAdornment position="start">Kg</InputAdornment>,
          }}}
          onChange={example}
          value={example} />
        <Button classes={this.runButtonClasses(classes)}>Run</Button>
        <Button onClick={this.submit}>Submit</Button>
      </form>
    );
  }
}
// ...
  <strong i="6">@withShallowMemoize</strong>
  render(memo) {
    const {title} = this.props;
    const {example} = this.state;

    return (
      <form>
        {title}
        <TextField
          InputProps={memo({
            startAdornment: <InputAdornment position="start">Kg</InputAdornment>,
          }}}
          onChange={example}
          value={example} />
        <Button classes={memo(classes)}>Run</Button>
        <Button onClick={this.submit}>Submit</Button>
      </form>
    );
  }

InputProps, Classes, рдЖрджрд┐ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп... рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрдХреНрд╖реНрдо-рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдпрд╣ рдПрдордпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╢реБрджреНрдз рдореЛрдб рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рд╕рд╣рд╛рдпрдХ рдШрдЯрдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдШрдЯрдХ рд╕реНрд╡рдпрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╢реБрджреНрдз рдШрдЯрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ WeightTextField рдЕрдм рдХрднреА рднреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ value рдЕрднреА рднреА рд╡рд╣реА рд╣реИ, рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдирд╛, рдЗрдирдкреБрдЯрдкреНрд░реЙрдкреНрд╕, рдпрд╛ рдЗрдирдкреБрдЯ рд╕рдЬрд╛рд╡рдЯ рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдИ рднреА рдЬреНрдЮрд╛рдкрди рдХрд╛рд░реНрдпред рдФрд░ рдЬрдм value рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЧреИрд░-рд╢реБрджреНрдз InputProps={{...}} рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

рдореИрдВ рдЗрд╕ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдареАрдХ рд╣реВрдБред рдореБрдЭреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕реВрдХреНрд╖реНрдо рдШрдЯрдХ рдкрд╕рдВрдж рд╣реИрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реИрдз рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕/рдкреИрдЯрд░реНрди рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ MyComponent = enhance(MyComponent) рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдЫреЛрдЯреЗ рдШрдЯрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рдЫреЛрдЯреЗ рддрд░реАрдХреЗ рдХреЛ рдирд╣реАрдВ рд╕рдЬрд╛ рд╕рдХрддреЗред рдореБрдЭреЗ import {TextField} from 'material-ui'; рдХреЛ import WeightTextField from '../../../ui/WeightTextField ;` рдореЗрдВ рдмрджрд▓рдирд╛ рднреА рдирд╛рдкрд╕рдВрдж рд╣реИред

```рдЬреЗрдПрд╕
рд╡реЗрдЯрдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб = ({рдпреВрдирд┐рдЯ, рдЗрдирдкреБрдЯрдкреНрд░реЙрдкреНрд╕, ...рдкреНрд░реЛрдкреНрд╕}) => (
{... рдкреНрд░реЙрдкреНрд╕}
рдЗрдирдкреБрдЯрдкреНрд░реЙрдкреНрд╕ = {{
рдкреНрд░рд╛рд░рдВрдн рдЕрд▓рдВрдХрд░рдг:{рдЗрдХрд╛рдИ} ,
...рдЗрдирдкреБрдЯрдкреНрд░реЙрдкреНрд╕
}}
рдСрди рдЪреЗрдВрдЬ = {рдЙрджрд╛рд╣рд░рдг}
рдореВрд▓реНрдп = {рдЙрджрд╛рд╣рд░рдг} />
);
рд╡реЗрдЯрдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб = рд╢реБрджреНрдз (рд╡реЗрдЯрдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб);

рд░рдирдмрдЯрди = рд▓рд┐рдЦреЗрдВ (
рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде (рдереАрдо => ({
рд▓реЗрдмрд▓: {
рдлрд╝реЙрдиреНрдЯрд╡реЗрдЯ: '800',
},
})),
рд╢реБрджреНрдз
) (рдмрдЯрди);

рдХреЙрдиреНрд╕реНрдЯ рд╕рдмрдорд┐рдЯрдмрдЯрди = рд╢реБрджреНрдз (рдмрдЯрди);

рдХреНрд▓рд╛рд╕ рдлреЙрд░реНрдордкреЗрдЬ рдШрдЯрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИ {
рд░рд╛рдЬреНрдп = {рдЙрджрд╛рд╣рд░рдг: ''};

рдкрд░рд┐рд╡рд░реНрддрди = рдИ => this.setState ({рдЙрджрд╛рд╣рд░рдг: e.target.value});
рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ = () => {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ:', this.state.example);
};

рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛() {
рдХреЙрдиреНрд╕реНрдЯ {рд╢реАрд░реНрд╖рдХ} = рдпрд╣ред рдкреНрд░реЙрдкреНрд╕;
рдХрд╛рд╕реНрдЯ {рдЙрджрд╛рд╣рд░рдг} = рдпрд╣ред рд░рд╛рдЬреНрдп;

return (
  <form>
    {title}
    <WeightTextField
      unit='Kg'
      onChange={example}
      value={example} />
    <RunButton>Run</RunButton>
    <SubmitButton onClick={this.submit}>Submit</SubmitButton>
  </form>
);

}
}
````

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ 500-2000 рдЪреЗрдХрдмреЙрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЗрд╢реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдкреНрд░рджрд░реНрд╢рди рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди <Checkbox> рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ рдФрд░ рдкреГрд╖реНрда рдкрд░ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдкрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: https://codesandbox.io/s/5x596w5lwn

рдореИрдВ mui@next рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕реА рд░рдгрдиреАрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ _now_ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

@wilsonjackson
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрди рдХрд╛рд░реНрдп рди рдХрд░реЗрдВред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдЧрд╛, рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА PureComponent рдЕрдиреБрдХреВрд▓рди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрдЧрд╛ред

  handleChange = index => event => {
    this.setState({

рджреВрд╕рд░реЗ, рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рдШрдЯрдХ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕ рдШрдЯрдХ рдХреЛ рд╢реБрджреНрдз рдмрдирд╛рдПрдВред рдЗрд╕рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдЧреБрдг рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд╕рднреА рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдФрд░, рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрди рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реВрдЪреА рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХ рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

https://codesandbox.io/s/r7l64j6v5n

рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдореВрд▓рднреВрдд рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╢реБрджреНрдз рдореЛрдб рдПрдордпреВрдЖрдИ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рджреЛ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

@dantman рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдбреАрдПрдХреНрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдП рдЧрдП рд╣реИрдВред

InputProps, Classes, рдЖрджрд┐ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп... рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрдХреНрд╖реНрдо-рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рдБ рд╣рдо рдХрд░рддреЗ рд╣реИрдВред рд░реИрдкрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреВрдЬрд░рд▓реИрдВрдб рдкрд░ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдпрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдЕрдиреБрднрд╛рдЧ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдБ рд╣рдо рдХрд░рддреЗ рд╣реИрдВред рд░реИрдкрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреВрдЬрд░рд▓реИрдВрдб рдкрд░ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдпрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдЕрдиреБрднрд╛рдЧ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХред рдЙрд╕ рд╕реНрддрд┐рдерд┐ рдореЗрдВ:

  • рд╣рдо recompose рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдЫреЛрдЯреЗ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рд╣реЗрдХ, рдореИрдВ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реВрдВрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдПрдХ рдФрд░ рдкреИрдЯрд░реНрди рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдкреБрди: рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрджреНрдз рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ рдХрд┐ рд░реАрдХрдВрдкреЛрдЬрд╝ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ
  • рдЬреИрд╕реЗ рд╣рдо рдПрдордпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рдд: рдкреВрд░реНрдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╢рд╛рдпрдж рд╡рд┐рднрд┐рдиреНрди рдореМрдЬреВрджрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрдЧрдарди рдкреИрдЯрд░реНрди рдФрд░ рдкрде рд╣реИрдХрд┐рдВрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рд╡реЗ рдЬреЛ рдЖрдкрдХреЛ ../../../../ui/Foo рдЖрдпрд╛рдд рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ) something-local/Foo ) рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдордпреВрдЖрдИ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдХреНрд╖реНрдо рдШрдЯрдХреЛрдВ рдХреА рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ import {TextField} from 'material-ui'; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдЖрд╕рд╛рдиреА рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ .

@dantman рд╢рд╛рдирджрд╛рд░, рдзрдиреНрдпрд╡рд╛рджред

рд╕реНрдЯрд╛рдЗрд▓реНрд╕ (рдпрд╛ рдмрд▓реНрдХрд┐ рдЬреЗрдПрд╕рдПрд╕) рдмрд╣реБрдд рдзреАрдореА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдХрдИ рдмрд╛рд░ рдПрд╕рд╕реАрдпреВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЬреЗрдПрд╕рдПрд╕ рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рдкрддрд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдлреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдпрд╛ рдЧреНрд▓реИрдорд░рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЗрдПрд╕рдПрд╕ рдФрд░ рдРрдк рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдЬреЗрдПрд╕рдПрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рдорд╛рдорд▓реЗ рдереЛрдбрд╝реЗ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрдк рд╕реНрддрд░ рдХреЗ рдПрд╕рд╕реАрдпреВ рдпрд╛ рд╕реНрдорд╛рд░реНрдЯ рд╕реНрдЯреЗрдЯ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рднреА рдПрдордпреВрдЖрдИ рдШрдЯрдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдзреАрдорд╛ рд╣реЛрдирд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдордпреВрдЖрдИ рдХреЗ рдЕрдВрджрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдордп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд░рдирд╛ рд╣реИред

рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдпрд╣ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ рдХрд┐ рдХрдо рдирд┐рд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдордпреВрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реАрдзреЗ рдЬреЗрдПрд╕рдПрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

@Pajn рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреБрдЫ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрдирд╛ рд╡рд╛рдХрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдпрд╛ рдЬрд╣рд╛рдВ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рд░реЗрдкреЛ рдХреА рдЬрд╛рдБрдЪ рдХреА https://github.com/reactopt/reactopt ?

$ click - button (text: ┘Е┘В╪з┘Д╪з╪к ) => CssBaseline,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,ScrollbarSize,TransitionGroup,TouchRipple,Ripple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,Main,ScrollbarSize,TransitionGroup,TouchRipple,Ripple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple,TransitionGroup,TouchRipple

рдпреЗ рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдШрдЯрдХ рдЕрджреНрдпрддрди рдЬреАрд╡рди-рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ?

@nimaa77

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рд░реЗрдкреЛ рдХреА рдЬрд╛рдБрдЪ рдХреА https://github.com/reactopt/reactopt ?
рдирд╣реАрдВ, рдореИрдВ рд╕рд╛рджреЗ рдХреНрдпреЛрдВ-рдХреНрдпрд╛-рдЖрдк-рдЕрдкрдбреЗрдЯ рдФрд░ рдХреНрд░реЛрдо/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╡ рдЙрдкрдХрд░рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдпреЗ рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдШрдЯрдХ рдЕрджреНрдпрддрди рдЬреАрд╡рди-рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ?

рдКрдкрд░ рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред рдпрд╣ рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд╢реБрджреНрдз рдФрд░ рдЧреИрд░ рд╢реБрджреНрдз рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рднрд╛рд░реА рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

@dantman

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ (рд╕рд╛рдЗрдб рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, "рд░рд┐рдПрдХреНрд╢рди-рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ" рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ рдФрд░ "рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░рд┐рдПрдХреНрд╢рди-рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ-рдПрд▓рд┐рдореЗрдВрдЯреНрд╕" рдкрд░ рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИред рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдЕрдиреНрдп рд╣рд╛рде рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЕрдиреБрдХреВрд▓рди рднреА рд╣реИрдВред рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдпрд╛ рдмреБрд░реЗред рдореБрдЭреЗ рдЕрдиреБрдХреВрд▓рди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд╕реЗрдЯрдЕрдк рдореЗрдВред рдореИрдВрдиреЗ рдКрдкрд░ рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдРрдк рдХреЛ рдХрдо-рдордзреНрдп рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдШрдЯрдХ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рджрд░реНрд╢рди рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдФрд░ рдЕрдиреНрдп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рд╛рдВ, рдореИрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реВрдВред

@Bessonov рд╢рд╛рдпрдж рд╣рдо рдЙрдерд▓реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП shouldComponentUpdate рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (https://reactjs.org/docs/shallow-compare.html) рдпрд╛ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░реЗрдВ,
рдпрд╣ рдШрдЯрдХреЛрдВ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рд╢реБрджреНрдз рдФрд░ рд╕рд╛рдорд╛рдиреНрдп) рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

@lucasljj рдореБрдЭреЗ рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд░рд╛рдЬреНрдп рдХреЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рднреА рджреЗрдЦреЗрдВ: рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдШрдЯрдХ sCU рдореЗрдВ return false; рд╕реЗ рддреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВред

рдПрд╕рд╕реАрдпреВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЧреИрд░ рд╢реБрджреНрдз рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ children ред рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрдпрд╛рди рджреЗрдЦреЗрдВред рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдереАрдо рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@bossonov рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╛рд░реНрдЯреА рдореЗрдВ рджреЗрд░ рд╕реЗ рдЖрдП рдереЗред рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рд╕рдмрдЯреНрд░реА рдкрд░ рдЗрд╕рдХреА рдХрдореА рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдП рд░реЗрдбрдХреНрд╕ рдлреЙрд░реНрдо рд╕реНрдЯрд╛рдЗрд▓ рд░реИрдкрд░ рдмрдирд╛рдПрдВрдЧреЗ

рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдФрд░ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдкреНрд░реЛрдк рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдк рдпрд╛ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЪрд╛рдЗрд▓реНрдб рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕ рд╕реНрддрд░ рддрдХ рдПрдХ рд░реАрд░реЗрдВрдбрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреНрд░реЛрдк рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдк рдпрд╛ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк рдкреНрд░рддрд┐ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдмрдЪреНрдЪреЗ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдирдП рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░реЛрдк рдХреЛ рдкрд╛рд╕ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред

@oliviertassinari

рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдлреЛрдХрд╕ рдкреЛрд╕реНрдЯ v1 рд░рд┐рд▓реАрдЬ рд╣реЛрдЧрд╛ред

рдмрдврд╝рд┐рдпрд╛, v1 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ :) рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдм рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреЛрд╕реНрдЯ v1 рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

@ рдмреЗрд╕реЛрдиреЛрд╡ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реЛрдбрдореИрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ:

  1. рд╣рдо рдЙрд╕ рдЪреАрдЬрд╝ рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рд╣рдо рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗред рд╣рдореЗрдВ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЕрдм рддрдХ рджреЛ рджрд┐рд▓рдЪрд╕реНрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрдЦреЗ рд╣реИрдВ:
  2. CSS рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ~ 30% рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо style = f(props) рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдареАрдХ рд╣реИ, рд╣рдо рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: #7633)ред рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рдХреБрд╢рд▓ рдХреИрд╢рд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдХреЛ 0% рддрдХ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЙрд╕ рдкрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдПрд╕рдПрд╕рдЖрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред
    рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рд╣рдо рдмреИрдмреЗрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдорд╣рдВрдЧрд╛ рдЬреЗрдПрд╕рдПрд╕ рдкреНрд░реАрд╕реЗрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП) cc @kofред

рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдКрдкрд░ рджрд┐рдП рдЧрдП 1 рдФрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП #4305 рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реИрдВред

  1. SSR рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрдореА рд░реАрд░реЗрдВрдбрд░рд┐рдВрдЧ рдпрд╛ рдХреЙрд░реНрдбреЛрд╡рд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдб рд╣реЛрдиреЗ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЕрднреА рднреА рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдХрд▓рди рд╕рдордп рдЕрдиреБрдХреВрд▓рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдИ (рдФрд░ рдмреЗрдмреЗрд▓ рдЗрддреНрдпрд╛рджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЬреЗрдПрд╕рдПрд╕-рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

ISTF + рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреБрдЫ ms рдХреЛ рд╢реЗрд╡ рдХрд░ рдкрд╛рдПрдЧреАред

рд╢рдирд┐рд╡рд╛рд░, 19 рдордИ, 2018, 19:06 рдХреЛ рдПрдВрдЯреЛрди рдмреЗрд╕реЛрдиреЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

1 рдФрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП #4305 . рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реИрдВ
https://github.com/mui-org/material-ui/issues/4305 рдКрдкрд░ред

  1. SSR рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрдореЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛
    рд░реАрд░реЗрдВрдбрд░рд┐рдВрдЧ рдпрд╛ рдХреЙрд░реНрдбреЛрд╡рд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
    рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЛрдмрд╛рдЗрд▓, рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рднреА рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ
    рдкрд╣рд▓реА рд▓реЛрдбрд┐рдВрдЧред

рд╕рдВрдХрд▓рди рд╕рдордп рдЕрдиреБрдХреВрд▓рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рд░реАрд░реЗрдВрдбрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдЪреАрдЬ рд╣реИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ mui . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
(рдФрд░ рдмреЗрдмреЗрд▓ рдЖрджрд┐) рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ jss-cache http://cssinjs.org/jss-cache?v=v3.0.0 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mui-org/material-ui/issues/10778#issuecomment-390418709 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AADOWGrCxNGqrT4MijiX8r9Ad32z6RsJks5t0FEtgaJpZM4S4woq
.

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
https://github.com/A-gambit/CSS-IN-JS-Benchmarks/blob/master/RESULT.md

рдУрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ (рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдмрд╣реБрдд рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИ

@janhoeck рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдЕрдиреНрдпрдерд╛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИред

@kof рдореИрдВ рдмрд╣реБрдд рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛ-рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдлрд╝реНрд░реЛрдбрд╛рдЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4x-6x рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХрд╛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдЪрдордХрджрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдПрдлрд╝реНрд░реЛрдбрд╛рдЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4x-6x рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рд╣реИ

@ рдмреЗрд╕реЛрдиреЛрд╡ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрджреНрдзрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
https://twitter.com/necolas/status/954024318308007937?lang=fr

рдореЗрд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:
я╕П рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде

capture d ecran 2018-06-12 a 17 58 54

рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХрд╛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдЪрдордХрджрд╛рд░ рдирд╣реАрдВ рд╣реИ

рд╣рдо рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреБрдж рд░рд┐рдПрдХреНрдЯ рдФрд░ рдШрдЯрдХреЛрдВ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдмрдВрдзреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

@Bessonov рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рдереЗ, рдЬрдм рдпрд╣ рдПрдлрд╝реНрд░реЛрдбрд╛рдЗрдЯ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ asap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ @oliviertassinari рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдмреЗрдВрдЪ рд╕рдмрд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИред

рдПрдордпреВрдЖрдИ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдореВрд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЕрдЧрд▓рд╛ рдПрдордпреВрдЖрдИ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред рдпрд╣ рдЗрддрдирд╛ рддреЗрдЬрд╝ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

@kof рдирд╣реАрдВ,

рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рди рдХрд┐рдпрд╛ рд╣реЛ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рд╣реЛ

рдЦреИрд░, рдКрдкрд░ рдХреБрдЫ рдХреЛрдбрд╕реИрдирдмреЙрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдордпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдВрдЯреЗрдирд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдбреЗрдореЛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред PureComponent рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ, рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЯреНрд░реА рд░реАрдСрд░реНрдбрд░рд┐рдВрдЧ, рдирд┐рд░рдВрддрд░ рддрддреНрд╡, рд╕рдВрд╕реНрдорд░рдг рдЖрджрд┐ рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдордпреВрдЖрдИ рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдПрдЯреАрдПрдо рд╣рдо рдЕрдм рджрд░рд╛рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ):
https://codesandbox.io/s/r1ov818nwm

@oliviertassinari рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдиреЗрдХреНрд╕рд╕ 4 рдкрд░ рдХреНрд░реЛрдо 66 рдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо 10 рдЧреБрдирд╛ рдЦрд░рд╛рдм рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЙрд╕рд╡реЙрдХ 21/рдХреНрд░реЛрдо 51 рдореЗрдВ рдпрд╣ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

screenshot_2018-06-12-18-20-19

рд╣рдо рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреБрдж рд░рд┐рдПрдХреНрдЯ рдФрд░ рдШрдЯрдХреЛрдВ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдмрдВрдзреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

IMHO рдЬрд░реВрд░реА рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЛрдВ рдиреЗ рднреА рдмрддрд╛рдпрд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдмреИрдЯрд░реА рдХреЗ рд▓рд┐рдП рд╣рд░ рдЯрд╛рд▓рд╛ рдЧрдпрд╛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рдЬреАрдд рд╣реИред рдордд рднреВрд▓реЛ, рдкреНрд░рджрд░реНрд╢рди рдЖрдкрдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рддреАрд╕рд░рд╛ рдмрд┐рдВрджреБ рд╣реИ: +1:

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЗрдВ: рдпрджрд┐ рдЖрдк cssinjs рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ cssinjs рдЖрдкрдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕реНрддрд░ рдкрд░ рдЕрдмрд╛рд╕реНрдЯреНрд░рдХреНрд╢рди рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпрд╛ рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@oliviertassinari рд╡рд╣ evtl рд╣реИред рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдордпреВрдЖрдИ рд░реИрдкрд░ рдЕрджреНрдпрддрди рдкрд░ рдЬреЗрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ? рдХреБрдЫ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ рдХреЛрдл

рдЗрд╕реЗ рдРрд╕реЗ рджреЗрдЦреЗрдВ [...]

рддреБрдореНрд╣рд╛рд░реА рдмрд╛рдд рд╕рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рд╢реБрджреНрдз) рдШрдЯрдХ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MUI PureComponent (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддреЗ рд╣реИрдВред @oliviertassinari рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╢ рдпрд╛ рдкреНрд░реА-рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред

рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ, рдЖрдк рдХрдорд╛рд▓ рдХреЗ рд▓реЛрдЧ рд╣реИрдВ рдФрд░ рдореИрдВ рд╣рд░ рдПрдордпреВрдЖрдИ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд╢ рд╣реВрдВ: рдХреНрд▓реИрдк: рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ ред

рдЕрдЧрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЬреЗрдПрд╕рдПрд╕ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдХреБрдЫ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрджреНрдпрддрди рдкрд░ рд╕реАрдПрд╕рдПрд╕ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╢реБрджреНрдз рдШрдЯрдХ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдордпреВрдЖрдИ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред PureComponent рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

JSS рдиреЗ рдкрд╣рд▓реЗ рджрд┐рди рд╕реЗ рд╣реА рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рд╕реВрдХреНрд╖реНрдо рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдЕрдВрддрд╣реАрди рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВред

рдпрд╣ рдордЬрд╝рд╛рдХреАрдп рд╣реИред рдореИрдВ рд╕рд╛рдордЧреНрд░реА ui рдШрдЯрдХреЛрдВ рдХреЛ рд╣рд░ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХ рд╕рдХрддрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реИ:

class RowText extends Component {
  shouldComponentUpdate = (nextProps, nextState) => {
    return false;
  };

  render() {
    const { title, artist } = this.props;
    return <ListItemText primary={title} secondary={artist} />;
  }
}

рдЯреНрд░рд┐рдЧрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реА рдХреИрд╕реЗ рд╣реИ ?

рдЕрд░реЗ, рдпрд╣ рдХреЗрд╡рд▓ рд╕реВрдЪреА рдФрд░ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдХреНрдпреЛрдВ ? рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

@ danielo515 рдкреВрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред List рдШрдЯрдХ рднреА рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЙрд╕ рдорд╛рди рдХреЛ рднреА рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЛ рднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ @ eps1lonред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рд╕реВрдЪреА рдШрдЯрдХ рдореЗрдВ рдХреБрдЫ рднреА рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдмрд╕ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЦреЛрдП рд╣реБрдП рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@ danielo515 рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рд░ рдмрд╛рд░ List рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдирдП рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдиреЗ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдХреЛ рдпрд╛рдж рдХрд░рдХреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдорд╛рди WRT рдХреЛ рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрджрд░реНрдн API рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдкрд░ рдПрдХ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХреЙрд▓ рдореЗрдВ List рдкрд░ рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ,

рддреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП List рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдПрдХ рдЖрд╕рд╛рди рдкреВрд░реНрдг рдмрдврд╝рд╛рд╡рд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдмрд╛рд░-рдмрд╛рд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рди рд╣реЛред рдореИрдВ рдкрд╣рд▓реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдпрд╛ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рд╕реЗ рдЬрдорд╛рдирдд рджреВрдВрдЧрд╛ред рдмрд╛рд░-рдмрд╛рд░ рд░реЗрдВрдбрд░ рдХреЙрд▓ Typography рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

React.memo рд╕рд╛рде рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ 3 рдПрдХреНрд╕рдкреЗрдВрд╢рдирдкреИрдирд▓ рдФрд░ рдХреБрдЫ 14 рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рд╡рд╛рд▓рд╛ рдПрдХ рдлреЙрд░реНрдо рд╣реИ рдФрд░ рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдкрд┐рдЫрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдЗрди рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рдкрд╛рдКрдВрдЧрд╛: s

@prevostc рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

@prevostc рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рдЬрдирди рджреЗрдЦреЗ рдмрд┐рдирд╛, рди рддреЛ рд╣рдо рдФрд░ рди рд╣реА рдЖрдк рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ

@prevostc рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдмрдирд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╛рдиреА рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╢реБрджреНрдз/рдореЗрдореЛрдб MyExpansionPanel рдШрдЯрдХ рдмрдирд╛рдПрдВ рдЬреЛ рдбреЗрдЯрд╛/рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрдк рд▓реЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рдФрд░ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдлрд┐рд░ рдЕрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ <MyExpansionPanel ... /> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдлрд┐рд░ рд░реА-рд░реЗрдВрдбрд░ рдПрдХ рдПрдХрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ (рдпрд╛ рджреЛ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╕рдордп рджреЛ) рддрдХ рд╕реАрдорд┐рдд рд░рд╣реЗрдВрдЧреЗред

@oliviertassinari @kof @dantman
рдпрд╣рд╛рдБ рдореЗрд░реА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╣реИ: https://codesandbox.io/s/yvv2y2zxxx

рдпрд╣ ~20 рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓рд╛ рдПрдХ рд░реВрдк рд╣реИ (рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ) рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдкрд░ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдВрдЧреЗред рдзреАрдореЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдпрд╣ рдлрд╝реЙрд░реНрдо рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢реБрджреНрдз рдШрдЯрдХ (React.memo) рдореЗрдВ рдПрдордпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрдЪреНрдЪреЗ рдФрд░ рдмрдЪреНрдЪреЗ рд╣реИрдВ, рдпрд╣ AFAIK рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ (рд╕реНрд░реЛрдд: https:// Reactjs.org/docs/react-api.html#reactpurecomponent)

рдиреАрдЪреЗ рдореЗрд░реЗ рдореИрдиреБрдЕрд▓ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИрдВ, рдПрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреБрдХреВрд▓рди рдХреЗ, рдПрдХ рд╕рдм рдХреБрдЫ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реБрдЖ рдФрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдЗрдирдкреБрдЯ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдХреНрд╕рд░ рдкреВрд░реЗ рдлреЙрд░реНрдо рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕рд╛рдордВрдЬрд╕реНрдп рдореЗрдВ рд▓рдЧрднрдЧ 60ms рд▓рдЧрддреЗ рд╣реИрдВ (16ms рд╕реЗ рдКрдкрд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдореБрдЭреЗ 60fps рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдордпреВрдЖрдИ рдкрд╕рдВрдж рд╣реИ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рдореБрдЭреЗ рджреБрдЦ рд╣реЛрддрд╛ <3

@dantman рдЖрдк рдПрдХ ExpansionPanel рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ (рдмрдЪреНрдЪреЛрдВ рдпрд╛ рдкреНрд░реЛрдк) рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ React.ReactNode рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╣реИрдВред

screenshot 2018-12-20 at 22 04 08

screenshot 2018-12-20 at 21 56 57

screenshot 2018-12-20 at 22 05 00

@dantman рдЖрдк рдПрдХ ExpansionPanel рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ (рдмрдЪреНрдЪреЛрдВ рдпрд╛ рдкреНрд░реЛрдк) рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ React.ReactNode рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╣реИрдВред

рд╣рд╛рдВ, рдкреИрдирд▓реЛрдВ рдХреЗ рдЧрд╣рд░реЗ рдШреЛрдВрд╕рд▓реЗ рд╡рд╛рд▓реЗ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдпреЗ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдмрд╣реБрдд рд╣рд▓реНрдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдмрдбрд╝реЗ рдШрдЯрдХ рд╕реЗ рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдк рд▓рдЧрднрдЧ рдкреВрд░рд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдмрд╕ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╣реБрдХрдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЬрдм рддрдХ рдЖрдк рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ React.memo рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╢реБрджреНрдз рдЕрдиреБрдХреВрд▓рди рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ, рддрдм рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рдпрд╛рдж рд░рдЦреЗрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдШрдЯрдХ рд╕реЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдШрдЯрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдк рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдкрдЯрд╛рдЗрдк рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдк рдЫреЛрдЯреЗ рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рд╣рд╛рдВ, рд╕рд╛рдордЧреНрд░реА UI рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдбреЛрдо рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИред рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдПрдХ рдПрдордпреВрдЖрдИ Input рдХрдЪреНрдЪреЗ input рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10x рдзреАрдореА рдереА рдФрд░ рдЪреАрдЬреЗрдВ 100 рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рдзреАрдореА рд╣реЛ рдЧрдИрдВред рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдПрдордпреВрдЖрдИ рдХреЗ рдмрд┐рдирд╛ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рднрд▓реЗ рд╣реА рдпрд╣ рдХрдЪреНрдЪреЗ input 10x рддреЗрдЬ рд╣реЛ

@prevostc рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рд╕рдорд╛рди-рдлрд╝рд╛рдЗрд▓ рдШрдЯрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдкрдХрд╛ рдбреЗрдореЛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рдкреИрдирд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рддреЛ рдореИрдВ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЗрдирдкреБрдЯ рднреА рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдХреВрд▓рди рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ рдкреИрдЯрд░реНрди рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЗрдирдкреБрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╛рдореЛрдВ, рд▓реЗрдмрд▓реЛрдВ рдФрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рд╕реАрдорд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рди рдХреЗрд╡рд▓ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдмрд▓реНрдХрд┐ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╢реБрд╖реНрдХ рдФрд░ рдкрдардиреАрдп рднреА рдХрдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА InputWrapper рдмрдЬрд╛рдп рдореИрдВ рд╢рд╛рдпрдж рдЙрд╕ рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ + рдЗрдирдкреБрдЯ рд▓реЗрдмрд▓ + рдлреЙрд░реНрдо рд╣реЗрд▓реНрдкрд░ рдЯреЗрдХреНрд╕реНрдЯ + рдЗрдирдкреБрдЯ рдХреЙрдореНрдмреЛ рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реНрдерд╛рдиреАрдп SimpleTextInput рдШрдЯрдХ рдореЗрдВ рддреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдЬреЛ рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛ (рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЗрдирдкреБрдЯ рд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ) рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

https://codesandbox.io/s/0o7vw76wzp

screen shot 2018-12-20 at 2 51 31 pm

рдЗрд╕реЗ рдкрдврд╝рдХрд░ рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореБрдИ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╣ рднреА рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рд╕реВрдЪреА рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рд╕рднреА рдЗрдирдкреБрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рд╕рд╛рджрд░

рдареАрдХ рд╣реИ рдпрд╣рд╛рдБ рдПрдХ рдЕрджреНрдпрддрди рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рд╣реИ https://codesandbox.io/s/wz7yy1kvqk

рдореИрдВ рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рдкрд░ @dantman рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ https://github.com/mui-org/material-ui/issues/10778#issuecomment -449153635 рд▓реЗрдХрд┐рди рдореИрдВ рдШрдЯрдХреЛрдВ рдХреА рдЗрд╕ рдХрдо рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рдореБрдЭреЗ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рд╕реНрд░реЛрдд рдорд┐рд▓рд╛ред

рдХреНрдпрд╛ рдЬреЗрдПрд╕рдПрд╕ рдзреАрдорд╛ рд╣реИ? (рд╕реНрдкреЙрдЗрд▓рд░ рдЕрд▓рд░реНрдЯ: рдирд╣реАрдВ)

рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореИрдВрдиреЗ withStyles рд╕рднреА рдХреЙрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рд╛ рдФрд░ рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ JSS рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдпрд╣ рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ @kof рдиреЗ https://github.com/mui-org/material-ui/issues/10778#issuecomment-396609276 рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ)ред

screenshot 2018-12-22 at 15 17 26

рдЬреЛрдбрд╝

рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлреЙрд░реНрдо рдЗрдирдкреБрдЯ рдХреЛ рдлреЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдкрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рднрд▓реЗ рд╣реА рдХреЗрд╡рд▓ рдПрдХ рдЗрдирдкреБрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реЛред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдЗрдирдкреБрдЯ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдореЗрдореЛрдЗрдЬреНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рд▓рдкреЗрдЯрд╛, рдЕрдЧрд░ рд╡реИрд▓реНрдпреВ рдирд╣реАрдВ рдмрджрд▓реА рддреЛ рд░реЗрдВрдбрд░ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛ред @dantman рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ ExpansionPanel рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдмрдирд╛рдКрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреИрдирд▓ рдЕрднреА рднреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдЗрд╖реНрдЯрддрдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

screenshot 2018-12-22 at 15 18 22

рдЗрд╕рд▓рд┐рдП? рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдореЗрдВ рднрд╛рд░реА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ React.ReactNode рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @dantman рдиреЗ https://github.com/mui-org/material-ui/issues/10778#issuecomment -449153635 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдПрдордпреВрдЖрдИ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ IMHO рдХреА рдЧрд▓рддреА рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЙрд╕рдХрд╛ рдкреГрд╖реНрда рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (https://reactjs.org/docs/optimizing-performance.html) рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛ рдЬреЛ perf рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдВрд╕реЛрд▓.рд╡рд╛рд░реНрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╕реНрддрд░ рдкрд░ рдореБрджреНрджреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ред

@prevostc рдЗрд╕ рд╕рдВрджреЗрд╢ рдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдирд╛ рджрд┐рдпрд╛, рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдореБрджрд╛рдп рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдирд╣реАрдВ: s

рдореИрдВ рдПрдордпреВрдЖрдИ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЕрднреА рдЗрд╕рдХреЗ рдХрдЪреНрдЪреЗ рдкреНрд░рджрд░реНрд╢рди (рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЖрдЬ рддрдХ рдХреБрдЫ рднреА рдирд┐рд░реНрдгрд╛рдпрдХ рдирд╣реАрдВ рд╣реИ: рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдРрдк рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд░реЗрдбрд┐рдпреЛ рд╕рдореВрд╣ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрднреА рддрдХ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрдИ рднреА рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рд╕реЗ рдХрд┐рд╕реА рднреА React.ReactNode рдкреНрд░реЛрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдмрдЪреНрдЪреЛрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдк рдЬреИрд╕реЗ рдЖрдЗрдХрди, рдЖрджрд┐) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ: https://codesandbox.io/s/jpw36jw65 (рдЪреЗрддрд╛рд╡рдиреА: рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ)ред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдПрдордпреВрдЖрдИ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдХреНрдпрд╛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рдкреНрд░рджрд░реНрд╢рди рдореБрджреНрджреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ @Bessonov рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ)?
рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рддрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдбрд╝реА рдФрд░ рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИ; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬреЛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпреВрдПрдХреНрд╕ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрдд рд╕реА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдВ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдмрддрд╛рдИ рдЧрдИ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

@ mkermani144 рд╣рдордиреЗ рдЕрднреА рддрдХ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЧрд▓рдд рдХрд░ рд░рд╣реА рд╣реИред рдЕрдм рддрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдШрд░реНрд╖рд░рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрддрд╛ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдХреБрдЫ рднреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ,

рдЯреЗрдмрд▓

рджреЗрд╡ рдореЛрдб

рдЖрдЗрдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдзреАрдорд╛ рдкрд╛рддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рд╣реИ , рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рджреЗрд╡ рдореЛрдб рдореЗрдВ 100 рдЖрдЗрдЯрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЯреЗрдмрд▓ рд░реЙ: https://codesandbox.io/s/v066y5q7z3 : рд░реЗрдВрдбрд░ рдореЗрдВ
  2. рдЯреЗрдмрд▓ рдордЯреЗрд░рд┐рдпрд▓-рдпреВрдЖрдИ рдорд╛рд╕реНрдЯрд░: https://codesandbox.io/s/m4kwmvj9ly : 250ms рд░реЗрдВрдбрд░ рдореЗрдВ
  3. рддрд╛рд▓рд┐рдХрд╛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЕрдЧрд▓рд╛: https://codesandbox.io/s/2o35yny1jn : рд░реЗрдВрдбрд░ рдореЗрдВ

рддреЛ рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рдкрд░ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рд▓рдЧрднрдЧ x4 рд╣реИ (рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЕрдВрддрд░ рдЫреЛрдЯрд╛ рд╣реИ!), рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдордзреНрдпрд╕реНрде рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ ~ 100 рдЯреЗрдмрд▓ рдЖрдЗрдЯрдо рдХреА рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм, рд╣рдо рдереЛрдбрд╝рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

  1. рдЯреЗрдмрд▓ рд░реЙ + рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреНрдпреЛрдВ? рд╣рдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдШрдЯрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рджреЛрд╣рд░рд╛рдПрдВред
    https://codesandbox.io/s/1zl75mwlpj : рд░реЗрдВрдбрд░ рдореЗрдВ 105ms
  2. рдЯреЗрдмрд▓ рд░реЙ + рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ + рдлреЙрд░рд╡рд░реНрдбрд░реЗрдлред рдлреЙрд░рд╡рд░реНрдбрд░реЗрдл рдХреНрдпреЛрдВ? рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдХ "рдкрд╛рд░рджрд░реНрд╢реА" рд╣реЛ, рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рдХреЛ рд░реЗрдлрд░реА рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред
    https://codesandbox.io/s/32o2y0o9op : рд░реЗрдВрдбрд░ рдореЗрдВ 120ms
  3. рдЯреЗрдмрд▓ рд░реЙ + рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ + рдлреЙрд░рд╡рд░реНрдбрд░рдл + рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рдеред рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
    https://codesandbox.io/s/j2n6pv768y : рд░реЗрдВрдбрд░ рдореЗрдВ 200ms
  4. рдЯреЗрдмрд▓ рд░реЙ + рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ + рдлреЙрд░рд╡рд░реНрдбрд░рдл + рдореЗрдХрд╕реНрдЯрд╛рдЗрд▓ред рдореЗрдХ рд╕реНрдЯрд╛рдЗрд▓ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рддреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
    https://codesandbox.io/s/yw52n07l3z : 130ms рд░реЗрдВрдбрд░ рдореЗрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд▓реАрд╡рд░реЗрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИ: рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдореЗрдХ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВред рд╣рдо рджреЗрд╡ рдореЛрдб рдореЗрдВ рд▓рдЧрднрдЧ +30% рдкреНрд░рджрд░реНрд╢рди (262 / (262 - 70)) рдЬреАрдд рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрдкрд╛рджрди рдореЛрдб

рдореИрдВрдиреЗ рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЪрд▓рд╛рдП рд╣реИрдВ:

  • n┬░1 30ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ
  • n┬░3 106ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ
  • n┬░4 40ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ
  • n┬░5 41ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ
  • n┬░6 80ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ
  • n┬░7 57ms рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдореЗрдВ

рддреЛ withStyles рд╕реЗ makeStyles рдкреНрд░рд╡рд╛рд╕ рдЕрднреА рднреА рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдПрдХ +30% рдЧрддрд┐ рд╣реИред

рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

@ mkermani144 рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рд╣реИ рддреЛ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдиреАрдЪреЗ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ List рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ ListItem s рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдФрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЪреБрдирдиреЗ рдФрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ ListItem рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдкреВрд░реА рд╕реВрдЪреА (рдЗрд╕рдХреЗ рдмрдЪреНрдЪреЛрдВ рд╡рд╛рд▓реЗ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдЬреИрд╕реА рд╣реА рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ; рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рддреЛ рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред

рдЖрдЗрдП рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

image
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЫрд╡рд┐ рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ MyList рдШрдЯрдХ рд╣реИред рдпрд╣ рдШрдЯрдХ MUI List рдЖрд╕рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдмрдирд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд:

class MyList extends React.PureComponent {
  render() {
    return (
      <List>
        {this.props.children}
      </List>
    );
  }
}

рдореИрдВрдиреЗ рдЗрд╕ рд░реИрдкрд░ рдХреЛ рдЗрд╕рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ @ eps1lon рдиреЗ рдЕрдкрдиреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ List рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рд╕рдВрджрд░реНрдн рдЕрджреНрдпрддрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрджрд░реНрдн рдЕрджреНрдпрддрди рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ ( ListItem s рд╕рд╣рд┐рдд) рдХреЛ рднреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ .

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА ListItem рд╢реБрджреНрдз рдмрдирд╛рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдРрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рдереЗ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореЗрд░реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ (рдпрд╛рдиреА MyListItem ) рдиреЗ _itself_ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдиреАрдЪреЗ рдХреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдиреЗ __did__ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдПрдордпреВрдЖрдИ рд╕реНрдЯрд╛рдЗрд▓ рд░реА-рд░реЗрдВрдбрд░ _somehow_ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд░реА-рд░реЗрдВрдбрд░ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рдпрд╛ рдореБрдЭ рд╕реЗ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдиреЛрдЯ: рдореИрдВ рдПрдордпреВрдЖрдИ рдиреНрдпреВ (рдЕрд▓реНрдлрд╛) рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╛рдиреА @material-ui/styles ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

@ mkermani144 рдореВрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдирд┐рдХрд╛рд▓реЗрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред рд╢реБрджреНрдз рддрд░реНрдХ рдЗрд╕ рддрд░рд╣ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред React.createElement рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдкрд░ рдирдП рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ PureComponent рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдФрд░ рд╡рд╕реНрддреБрдПрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП sCU рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЬрдм рдЖрдк React.createElement рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИред рдХреМрди рд╕реА рдХреЙрд▓ createElement ? рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм List рдЕрдВрджрд░ рдХреА рдХреЙрд▓ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ createElement рдХреЛ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ ( ListItem s) рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ createElement рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЛрдИ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ List рдЦреБрдж рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ mkermani144 рдпрджрд┐ рдЖрдк рдиреНрдпреВрдирддрдо рдкреНрд░рдЬрдирди рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХрд╛ MyList (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ List ) MyList (рдЗрд╕реЗ MyComponent ) рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЗ рдХрд╛рд░рдг рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред MyList рдкрд░ PureComponent рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ MyComponent рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ MyList рд▓рд┐рдП рдирдП рдмрдЪреНрдЪреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ MyList рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПред

рдЖрдкрдХрд╛ MyComponent рд╕рдВрднрд╡рдд: рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рдЖрдк рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдХреЗ рдПрдордпреВрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕реВрдЪреА рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ
рдпрд╣рд╛рдВ: https://github.com/mui-org/material-ui/blob/fb4889f42613b05220c49f8fc361451066989328/packages/material-ui/src/List/List.js#L57

рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реВрдЪреА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВ:

const List = React.forwardRef(function List(props, ref) {
  const {
    children,
    classes,
    className,
    component: Component,
    dense,
    disablePadding,
    subheader,
    ...other
  } = props;
  const context = React.useMemo(() => ({ dense }), [dense]);

  return (
    <Component
      className={clsx(
        classes.root,
        {
          [classes.dense]: dense && !disablePadding,
          [classes.padding]: !disablePadding,
          [classes.subheader]: subheader,
        },
        className,
      )}
      ref={ref}
      {...other}
    >
      <ListContext.Provider value={context}>
        {subheader}
        {children}
      </ListContext.Provider>
    </Component>
  );
});

рдЗрд╕рд╕реЗ ListItems рдХреЗ sCU рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛

MyList (рдЗрд╕реЗ MyComponent рдХрд╣рддреЗ рд╣реИрдВ) рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреА MyList (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪреА) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред MyList рдкрд░ PureComponent рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ MyComponent рдХреЛ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ MyList рдХреЗ рд▓рд┐рдП рдирдП рдмрдЪреНрдЪреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ MyLists рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПред

@Pajn рдирд╣реАрдВ, рдореЗрд░реЗ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ ред MyList рдиреЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдпрд╣ рдЧреНрд░реЗ рд╣реИ), рд▓реЗрдХрд┐рди List рдиреЗ рдХрд┐рдпрд╛ (рдпрд╣ рдиреАрд▓рд╛ рд╣реИ)ред рдореИрдВ PureComponent рд▓рд┐рдП MyList рдкрд░ рдХрд╛рдпрдо рдирд╣реАрдВ рд╣реВрдВред рднрд▓реЗ рд╣реА рдореИрдВ sCU рдХреЛ MyList sCU рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рди рд╣реЛ, List __ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ__ред

@oliviertassinari
рдореИрдВрдиреЗ рдПрдХ рдиреНрдпреВрдирддрдо рдкреНрд░рдЬрдирди рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛:

import React, { Component } from 'react';

import StylesProvider from '@material-ui/styles/StylesProvider';
import ThemeProvider from '@material-ui/styles/ThemeProvider';

import { createMuiTheme } from '@material-ui/core';

import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';

const theme = createMuiTheme({});

const MyListItem = React.memo(ListItem, (prev, next) => prev.selected === next.selected);

class App extends Component {
  state = {
    selected: null,
  }
  render() {
    return (
      <StylesProvider>
        <ThemeProvider theme={theme}>
          <List>
            {[0, 1, 2, 3, 4].map(el => (
              <MyListItem
                button
                selected={el === this.state.selected}
                onClick={() => this.setState({ selected: el })}
              >
                {el}
              </MyListItem>
            ))}
          </List>
        </ThemeProvider>
      </StylesProvider>
    );
  }
}

export default App;

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдкрд░рд┐рдгрд╛рдо (рдЪреМрдереА рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж):

image

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реА-рд░реЗрдВрдбрд░ рдирд╣реАрдВ рд╣реИ ( ListItem s рдХреЗ рдЕрдВрджрд░ ButtonBase рдШрдЯрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдпрд╣ рдкреНрд░рдЬрдирди _рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо_ рд╣реИ; рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЕрддрд┐рд░рд┐рдХреНрдд рд░реА-рд░реЗрдВрдбрд░ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрд╕реЗ рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫрддрд╛ рд╣реВрдВ: рдПрдордпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓реЗ WithStylesInner рдШрдЯрдХреЛрдВ рдореЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@ mkermani144 рдЖрдк рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

--- a/packages/material-ui/src/List/List.js
+++ b/packages/material-ui/src/List/List.js
@@ -40,6 +40,13 @@ const List = React.forwardRef(function List(props, ref) {
     ...other
   } = props;

+  const context = React.useMemo(
+    () => ({
+      dense,
+    }),
+    [dense],
+  );
+
   return (
     <Component
       className={clsx(
@@ -54,7 +61,7 @@ const List = React.forwardRef(function List(props, ref) {
       ref={ref}
       {...other}
     >
-      <ListContext.Provider value={{ dense }}>
+      <ListContext.Provider value={context}>
         {subheader}
         {children}
       </ListContext.Provider>

рдХреНрдпрд╛ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? :) рд╣рдо рдЯреЗрдмрд▓ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@oliviertassinari рдЬрд╝рд░реВрд░ред рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ @Pajn рдиреЗ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд┐рдпрд╛ред

14934 рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, List рдШрдЯрдХ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдирд╛ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛред рдХреНрдпрд╛ рд╣рдореЗрдВ react-window рдпрд╛ react-virtualized рдХреЛ List рдШрдЯрдХ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Table рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реИ?

рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕реВрдЪреА рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╣реИ?

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛: +1:

Fwiw рдореИрдВрдиреЗ рдПрдХ рдЪреИрдЯ рдРрдк рдмрдирд╛рдпрд╛ рдФрд░ рдРрдк рдХреЛ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛
@ mkermani144 рдерд╛ред

https://stackoverflow.com/questions/55969987/why-do-the-children-nodes-rerender-when-the-parent-node-is-not-even-being-update/55971559

@ henrylearn2rock рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ? рд╣рдордиреЗ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдЬреЛрдбрд╝рд╛ рд╣реИ: https://next.material-ui.com/demos/lists/#virtualized -listред

рдЗрд╕рдиреЗ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдлрдБрд╕рд╛ рджрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ (рдореЗрд░реЗ рд╕рд╣рд┐рдд) рдиреЗ рдорд╛рдирд╛ рдХрд┐ рдПрдХ рд╢реБрджреНрдз рдШрдЯрдХ рдХреЗ рддрд╣рдд рд╕рдм рдХреБрдЫ рдПрдХ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдерд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ (рдореЗрд░реЗ рд╕рд╣рд┐рдд) рдиреЗ рдорд╛рдирд╛ рдХрд┐ рдПрдХ рд╢реБрджреНрдз рдШрдЯрдХ рдХреЗ рддрд╣рдд рд╕рдм рдХреБрдЫ рдПрдХ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдерд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ React.PureComponent рдпрд╛ React.memo рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдШрдЯрдХ рдХреЛ рд╣реА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЕрднреА рднреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

@pytyl рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ PureComponent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЙрдореНрдореАрдж рдХреА рдереА рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рдЙрдк-рдкреЗрдбрд╝ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛?

@ eps1lon рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ shouldComponentUpdate рд╕реЗ рдЭреВрдареА рд╡рд╛рдкрд╕реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИред
https://reactjs.org/docs/optimizing-performance.html# shouldcomponentupdate -in-action

рдЪреВрдБрдХрд┐ shouldComponentUpdate C2 рдкрд░ рдирд┐рд╣рд┐рдд рд╕рдмрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд▓реМрдЯрд╛, рддреЛ рд░рд┐рдПрдХреНрдЯ рдиреЗ C2 рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ C4 рдФрд░ C5 рдкрд░ shouldComponentUpdate рдХреЛ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рдкрд░ рдЧрд▓рдд рд╣реВрдБ? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрд╛ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИред рдмрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдореЗрдиреВ рдШрдЯрдХ рдореЗрдВ shouldComponentUpdate рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░рддрд╛ рд╣реВрдВ:

Screen Shot 2019-05-08 at 7 46 32 PM

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЗ рдШрдЯрдХреЛрдВ (рд╢реНрд░реЗрдгрд┐рдпреЛрдВ, рд╢реНрд░реЗрдгреА, рд╢реНрд░реЗрдгреА рдХреЗ рдЖрдЗрдЯрдо, рд╢реНрд░реЗрдгреА рдХреЗ рдЖрдЗрдЯрдо) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдПрдордпреВрдЖрдИ рд╕реЗ рдЬреБрдбрд╝реА рдХрдИ рдЪреАрдЬреЗрдВ рдиреАрдЪреЗ рдХреА рддрд░рдл рд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓рдЧрддреА рд╣реИрдВ рдЬреЛ рдХрд╛рдлреА рджреЗрд░реА рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реА рд╣реИрдВред рд╕реНрдЯрд╛рдЗрд▓, рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА, рдмрдЯрдирдмреЗрд╕ рдЬреИрд╕реА рд╕рд╛рдордЧреНрд░реАред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдореЗрд░реА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдиреАрдЪреЗ рдореЗрдиреВ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХреЛрдб рд╣реИ (рдЬрд╣рд╛рдВ рдореИрдВ shouldComponentUpdate рдХреЗ рд▓рд┐рдП рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ):

import React, { Component } from "react";
import Categories from "./Categories";
import { withStyles, Paper } from "@material-ui/core";

const styles = theme => ({
  root: {
    paddingTop: 0,
    marginLeft: theme.spacing.unit * 2,
    marginRight: theme.spacing.unit * 2,
    marginTop: theme.spacing.unit * 1
  }
});

class Menu extends Component {
  shouldComponentUpdate(nextProps, nextState) {
    if (nextProps.categories.length == this.props.categories.length) {
      return false;
    }
    return true;
  }

  render() {
    const { classes, categories } = this.props;

    return (
      <Paper className={classes.root}>
        <Categories categories={categories} />
      </Paper>
    );
  }
}

export default withStyles(styles)(Menu);

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдкреВрд░реНрдг рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@ eps1lon рдореИрдВ рдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@ eps1lon рдпрд╣рд╛рдБ рдХреЛрдбрдкреЗрди рд╣реИ:
https://codesandbox.io/s/348kwwymj5

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрди
рдпрд╣ рд░реЗрд╕реНрддрд░рд╛рдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдореЗрдиреВ рдРрдк рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдЕрдХреНрд╕рд░ 100 рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рд╣реЛрддреЗ рд╣реИрдВ)ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ "рдСрд░реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ" рд╕рдВрд╡рд╛рдж рдЦреЛрд▓рддрд╛ рд╣реИред рдореИрдВ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ (рдпреЗ рдЖрдВрдХрдбрд╝реЗ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдкрд░ рдирд╣реАрдВ рд╣реИрдВ)ред

рдкреНрд░рдгрд╛рд▓реА
рдореИрдХрдмреБрдХ рдкреНрд░реЛ (рд░реЗрдЯрд┐рдирд╛, 13-рдЗрдВрдЪ, 2015 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ)
3.1 GHz рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7
рдлрд╛рдпрд░рдлреЙрдХреНрд╕ 66.0.3

рдХреЗрд╕ 1 (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ)
рд░реЗрдВрдбрд░ рдЕрд╡рдзрд┐: 218ms

Screen Shot 2019-05-10 at 4 45 26 AM

Screen Shot 2019-05-10 at 4 45 48 AM

рдХреЗрд╕ 2 (рд╕рдВрд╡рд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд┐рдХреНрд╕ рдРрдб рдЯреВ рдСрд░реНрдбрд░ рдмрдЯрди)
рд░реЗрдВрдбрд░ рдЕрд╡рдзрд┐: 356ms

Screen Shot 2019-05-10 at 4 46 24 AM

Screen Shot 2019-05-10 at 4 47 10 AM

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдЧрд▓рддреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ WithStyles(ButtonBase) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ WithStyles рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдореИрдВ рдЗрд╕ рдЦреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм https://github.com/mui-org/material-ui/blob/048c9ced0258f38aa38d95d9f1cfa4c7b993a6a5/packages/material-ui-styles/src/StylesProvider/StylesProvider.js#L38 рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ StylesProvider рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (GitHubs рдЦреЛрдЬ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИ) рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ @ eps1lon рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдкрд░ рдЙрдкрдпреЛрдЧ рдореЗрдореЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд▓реНрдк рд╕реНрдерд┐рд░ рд╣реИрдВ рдпрд╛ рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдореЛ рдХреЛ рдФрд░ рднреА рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╢рд╛рдпрджред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХрд╛ рдШрдЯрдХ StylesProvider рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рдЖрдкрдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рд╣реИ рдпрд╛ рдХреБрдЫ UI рд╕реАрдорд╛ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рд╡реИрд╕реЗ рднреА рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рдореЗрдВ рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрд╕реНрдорд░рдг рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ рд╣реИред рддреЛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╣рд╛рдБ рдЪреАрдЬреЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИрдВред рдХрднреА-рдХрднреА рдЕрдзрд┐рдХ рдмрд╛рд░ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╡реНрдпрд░реНрде рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдЕрдбрд╝рдЪрди рдХрд╛ рдХрд╛рд░рдг рд╣реИред

@pytyl рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЖрдк рд╕рдм рдХреБрдЫ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдЧреНрд▓реЛрдмрд▓ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╢реБрджреНрдз рддрд░реНрдХ рдХреВрджрддрд╛ рд╣реИред

@ eps1lon рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдЯреАрдПрд▓; рдбреАрдЖрд░: рд╕рдВрджрд░реНрдн рд╕реНрд▓рд╛рдЗрд╕ рдмрдирд╛рдПрдВ, рд╕рдВрджрд░реНрдн рдореВрд▓реНрдпреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ: https://codesandbox.io/s/8lx6vk2978

рдХреНрдпрд╛ рдХреБрдЫ рдЦреБрджрд╛рдИ рд╣реБрдИ рдФрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдмрдбрд╝рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдЖрдк рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдХреИрдЯреЗрдЧрд░реАрдЖрдЗрдЯрдо рдЗрд╕реЗ рд╕реБрди рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдРрдк рдореЗрдВ 100 рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 100 рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдореЗрдиреВ рдЖрдЗрдЯрдо рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рд╣рдЬрд╛рд░ рдХрдЯреМрддреА рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдореМрдд рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред

рддреЛ рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд░рд╛рдЬреНрдп рдФрд░ рдкреНрд░реЗрд╖рдг рд╕рдВрджрд░реНрдн рдЙрдкрдпреБрдХреНрдд рд╣реИред useReducer рдХреЗ рд╕рд╛рде useContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдкреЗрдбрд╝ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рд╣реЛрдВрдЧреЗ, рдкреНрд░реЙрдкреНрд╕ рдирд░реНрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ useContext рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреАред

@oliviertassinari рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдо рдиреБрдХрд╕рд╛рди рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореБрджреНрджрд╛ рд╣реИред рд╣рдо рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

@oliviertassinari @ eps1lon рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдзреАрдореА рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдмрд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВрдиреЗ <Box> рдШрдЯрдХ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ <div> s рд╕реЗ рдмрджрд▓рдХрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ devtools рдлреНрд▓реЗрдордЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВ рд▓рдЧрднрдЧ 420ms рд╕реЗ 20ms рддрдХ рдЪрд▓рд╛ рдЧрдпрд╛ред

<Box> рддреЛрдВ рдХреЗ рд╕рд╛рде;
Screen Shot 2019-08-16 at 12 47 25 AM

<Box> рдмрд┐рдирд╛:
Screen Shot 2019-08-16 at 12 42 38 AM

@mankittens рдЖрдк рд╕реНрдЯрд╛рдЗрд▓ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдХреНрд╕ рдШрдЯрдХ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП https://github.com/mui-org/material-ui/pull/16858ред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдкреНрд░рджрд░реНрд╢рди рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реВрддреНрд░ рдХреАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

anthony-dandrea picture anthony-dandrea  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mb-copart picture mb-copart  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pola88 picture pola88  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattmiddlesworth picture mattmiddlesworth  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ericraffin picture ericraffin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ