React.lazy? рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдпрд╣ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереЛрдбрд╝рд╛ рдердХ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╕рднреА рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдХреЛрдб рд╡рд┐рднрд╛рдЬрди рдореЙрдбреНрдпреВрд▓ рд╕реНрддрд░ рдкрд░ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ рдШрдЯрдХ рд╕реНрддрд░ рдкрд░ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдЖред

рдФрд░ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рд░ рдореЗрдВ рд╣реИ - React.lazy рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдпрд╛рдд рджреВрд░ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ ... рддреЛ рдХреЛрдб рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рдмрдВрдЯ рд░рд╣рд╛ рд╣реИ?

React.lazy, React-Loadable, Loadable-Components, Imported-Components - рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЪреАрдиреА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред Async-loader рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХреЛрдбред

const loadable = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ ResultComponent: result.default || result})) // "es6" default export .catch(() => this.setState({ error: true }); } render() { const { error, ResultComponent } = this.state; // Display loaded component return ResultComponent ? <ResultComponent {...this.props}/> : (error ? <ErrorComponent /> : <LoadingComponent />) } } 

рд╕рд╕реНрдкреЗрдВрд╕ рдФрд░ React.lazy рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдШрдЯрдХ рди рд╣реЛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдпрд╛рдд ("someStuff")ред рдлрд┐рд░ ('рдЧреЛ-рдСрди') ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рд╕рд╡рд╛рд▓ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдП, рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпрд╛ рд╡рд╛рджрд╛ рдШрдЯрдХ рдХреА рдореГрддреНрдпреБ рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдФрд░ рд╕рд┐рд░ рдореЗрдВ рд╕рднреА рдПрдХ рдШрдЯрдХ рд╣реИрдВред

рдореИрдВрдиреЗ рдПрдХ рдорд┐рдиреА рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд┐рдпрд╛ - NOBODY рдХреЛрдб рд╡рд┐рднрд╛рдЬрди рдХреЗ рдЗрд╕ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИред
рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ 4 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ - рд░реЗрдВрдбрд░рдкреНрд░реЙрдкреНрд╕

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреЛрдб рд╡рд┐рднрд╛рдЬрди рдХреА рд╡рд╕реНрддреБ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ - рдШрдЯрдХ рдЕрднреА рднреА рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕реНрдерд╛рди рд╣реЛрдЧрд╛ред

 const loadableModule = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ module: result.default || result})) // "es6" default export .catch(() => this.setState({ error: true }); } render() { const { error, module } = this.state; return module // pass it as a render prop! ? this.props.children(module) // pass it as a render prop! : (error ? <ErrorComponent /> : <LoadingComponent />) } } 

рдПрдХ рд╣реА рдкреИрдЯрд░реНрди, рдХреЗрд╡рд▓ рдХреЛрдб рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд░реЗрдВрдбрд░рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ "рдкреНрд░рджрд╛рди" рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред

рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:



рд╕рд╕реНрддрд╛ рдФрд░ рдмрд╣реБрдд рдЧреБрд╕реНрд╕реЗ рд╡рд╛рд▓рд╛ред рдЗрд╕рдиреЗ рдореБрдЭреЗ 20% рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рдХреА рдмрд╣реБрдд рд╣реА рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

рдЕрдм рдЖрдкрдХрд╛ рдХрджрдо,% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%ред
рдФрд░ рдЗрд╕реЗ рд╣реБрдХ рдкрд░ рдХреМрди рд▓рд┐рдЦреЗрдЧрд╛?

Source: https://habr.com/ru/post/hi443124/


All Articles