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

React.js рдХреА рдЯреАрдо рд░рд┐рдПрдХреНрдЯ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реА рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ:
- рд╡рд┐рд▓рдВрдмрд┐рдд рдШрдЯрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП React.lazy рдФрд░ Suspense;
- рд╢реБрджреНрдз рдШрдЯрдХ
- рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╣реБрдХ рдЪрд╛рд╣рд┐рдПрдХрдВрдкрдиреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (...) {...}ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ, рдШрдЯрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП React v16.6 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдПрдХ рдЕрдиреНрдп рдЕрдиреБрдХреВрд▓рди рдЙрдкрдХрд░рдг -
React.memo рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ ред
рдпреБрдХреНрддрд┐: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕реЗ рдЖрдЬрдорд╛рдЗрдП!

рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЗрдВрдбрд░
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдПрдХ рджреГрд╢реНрдп рдЗрдХрд╛рдИ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЕрд╡рдпрд╡реЛрдВ рдореЗрдВ рднреА рд░рд╛рдЬреНрдп рд╣реИрдВред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд░рд╛рдЬреНрдп рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░реНрд╡рд┐рдХрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЖрдк рдПрдХ рд░реЗрдВрдбрд░рд░ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
import React from 'react'; class TestC extends React.Component { constructor(props) { super(props); this.state = { count: 0 } } componentWillUpdate(nextProps, nextState) { console.log('componentWillUpdate') } componentDidUpdate(prevProps, prevState) { console.log('componentDidUpdate') } render() { return ( <div > {this.state.count} <button onClick={()=>this.setState({count: 1})}>Click Me</button> </div> ); } } export default TestC;
{рдЧрдгрдирд╛: 0} рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд╣реИред рдпрджрд┐ рдЖрдк рдХреНрд▓рд┐рдХ рдореА рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧрд┐рдирддреА рдХреА рд╕реНрдерд┐рддрд┐ 1 рд╣реЛ рдЬрд╛рдПрдЧреАред рд╣рдорд╛рд░реА рд╕реНрдХреНрд░реАрди рдкрд░, 0 рднреА рдмрджрд▓ рдЬрд╛рдПрдЧреАред 1. рд▓реЗрдХрд┐рди рдпрджрд┐ рд╣рдо рдлрд┐рд░ рд╕реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ: рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рдд рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВред рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ "рдЯреВ" 1 рд╣реИ, рдирдпрд╛ рдореВрд▓реНрдп рднреА рдПрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ DOM рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░реЗ рдЯреЗрд╕реНрдЯрд╕реА рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рдХреЛ рджреЛ рдмрд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рджреЛ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрдм рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдШрдЯрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ / рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдПрдХ рдШрдЯрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ ComponentsdidUpdate рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрдХреНрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдШрдЯрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдореА рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

рд╣рдорд╛рд░реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓реАрдкреЗрдб рдПрдВрдЯреНрд░реА рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкреЛрдиреЗрдВрдЯ рддрдм рднреА рд░рд┐рд╡рд░реНрдЬрди рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рд╕реНрдЯреЗрдЯ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЗрдВрдбрд░ рд╣реИред
рд╢реБрджреНрдз рдХрдВрдкреЛрдиреЗрдВрдЯ / shouldComponentUpdate
ShouldComponentUpdate рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд░рд┐рдПрдХреНрдЯ рдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ
shouldComponentUpdate рдореЗрдердб рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдпрд╛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ
рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рд╣рд░реА рдмрддреНрддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ shouldComponentUpdate рдХреЛ рджреЗрдЦрдиреЗ рджреЗрдВ:
shouldComponentUpdate(nextProps, nextState) { return true }
nextProps
: рдЕрдЧрд▓рд╛ props
рдореВрд▓реНрдп рдЬреЛ рдШрдЯрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛;nextState
: рдЕрдЧрд▓рд╛ state
рдорд╛рди рдЬреЛ рдШрдЯрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ
true
ред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
shouldComponentUpdate(nextProps, nextState) { return false }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдШрдЯрдХ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐
false
рд▓реМрдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред
рдКрдкрд░ рд╕реЗ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
true
рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
true
ред рдЕрдм рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ TestC рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
import React from 'react'; class TestC extends React.Component { constructor(props) { super(props); this.state = { count: 0 } } componentWillUpdate(nextProps, nextState) { console.log('componentWillUpdate') } componentDidUpdate(prevProps, prevState) { console.log('componentDidUpdate') } shouldComponentUpdate(nextProps, nextState) { if (this.state.count === nextState.count) { return false } return true } render() { return ( <div> { this.state.count } <button onClick = { () => this.setState({ count: 1 }) }> Click Me </button> </div> ); } } export default TestC;
рд╣рдордиреЗ TestC рдШрдЯрдХ рдореЗрдВ рдПрдХ shouldComponentUpdate рд╣реБрдХ рдЬреЛрдбрд╝рд╛ рд╣реИред рдЕрдм рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ
count
рд╡реИрд▓реНрдпреВ
this.state.count
рддреБрд▓рдирд╛ рдЕрдЧрд▓реЗ рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ
nextState.count
рдореЗрдВ
count
рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдХреА
nextState.count
ред рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ
===
, рддреЛ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░
false
рд▓реМрдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ
true
рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирдП рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдВрдбрд░рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рд▓реЗрдХрд┐рди
Click Me
рдмрдЯрди рдкрд░ рдХрдИ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рд╕рднреА рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ!)ред
componentWillUpdate
componentDidUpdate

рдЖрдк React DevTools рдЯреИрдм рдореЗрдВ TestC рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рджрд╛рдИрдВ рдУрд░ TestC рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдЖрдк рдХрд╛рдЙрдВрдЯрд░ рд╕реНрдерд┐рддрд┐ рдорд╛рди рджреЗрдЦреЗрдВрдЧреЗ:

рдЗрд╕ рдорд╛рди рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рдЙрдВрдЯрд░ рдЯреЗрдХреНрд╕реНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, 2 рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдПрдВрдЯрд░ рджрдмрд╛рдПрдВред

рдЧрд┐рдирддреА рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:
componentWillUpdate componentDidUpdate componentWillUpdate componentDidUpdate

рдкрд┐рдЫрд▓рд╛ рдорд╛рди 1 рдерд╛, рдФрд░ рдирдпрд╛ 2 рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ redraw рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рд╢реБрджреНрдз рдШрдЯрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд╢реБрджреНрдз рдШрдЯрдХ рд╕рдВрд╕реНрдХрд░рдг v15.5 рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (
change detection
) рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
extend React.PureComponent
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЛ
shouldComponentUpdate
рд▓рд┐рдП
shouldComponentUpdate
рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИ: рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреА рд╣реИред
TestC рдШрдЯрдХ рдореЗрдВ рдПрдХ PureComponent рдЬреЛрдбрд╝реЗрдВред
import React from 'react'; class TestC extends React.PureComponent { constructor(props) { super(props); this.state = { count: 0 } } componentWillUpdate(nextProps, nextState) { console.log('componentWillUpdate') } componentDidUpdate(prevProps, prevState) { console.log('componentDidUpdate') } render() { return ( <div> { this.state.count } <button onClick = { () => this.setState({ count: 1 }) }> Click Me </button> </div > ); } } export default TestC;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ
shouldComponentUpdate
ред рд╣рдореЗрдВ рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕рднреА рдХрд╛рд░реНрдп
React.PureComponent
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛, рдФрд░ рдХрдИ рдмрд╛рд░
Click Me
рдмрдЯрди рдкрд░
Click Me
, рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ
component*Update
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреАред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ ES6 рдХреЗ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд░реАрдбреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдШрдЯрдХ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдШрдЯрдХ
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрдпреЛрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд░
shouldComponentUpdate
рдЬреАрд╡рди рдЪрдХреНрд░
shouldComponentUpdate
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░реЗрдВред рдХреЛрдИ рднреА рддрд░реНрдХ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдШрдЯрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
function TestC(props) { return ( <div> I am a functional component </div> ) }
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ, рд╡рд░реНрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рдЬреЛ рдЙрдкрдпреЛрдЧ
useState
рд╣реБрдХ
useState
, рдЗрд╕рдХреЗ рд╕рд╛рде рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЙрдирдХреЗ рдкреБрдирд░реНрд╡рд┐рдХрд╛рд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдЬрд┐рди рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд╡реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдлрдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдореЗрдВ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╣реБрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реЗрдВрдбрд░рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
shouldComponentUpdate
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред (рд╢рд╛рдпрдж рд▓реЗрдЦрдХ рдиреЗ рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдп рдореЗрдВ рдПрдХ рддрдереНрдпрд╛рддреНрдордХ рдЧрд▓рддреА рдХреА рд╣реИред - рд▓рдЧрднрдЧред рдПрдбред) рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо
extend React.PureComponent
рдХрд╛
extend React.PureComponent
рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХ рд╡рд░реНрдЧ ES6 TestC рдХреЛ рдПрдХ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
import React from 'react'; const TestC = (props) => { console.log(`Rendering TestC :` props) return ( <div> {props.count} </div> ) } export default TestC;
рдХрдВрд╕реЛрд▓ рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо
Rendering TestC :5
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреЗрдЦрддреЗ рд╣реИрдВред

DevTools рдЦреЛрд▓реЗрдВ рдФрд░ React рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рд╣рдо TestC рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред TestC рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рджрд╛рдИрдВ рдУрд░ TestC рдХреЗ рд╕рднреА рдЧреБрдг рдФрд░ рдорд╛рди рд╡рд╛рд▓реЗ рдХрд╛рдЙрдВрдЯрд░ рдЧреБрдг рдЦреБрд▓реЗрдВрдЧреЗред рд╣рдо рдХреЗрд╡рд▓ 5 рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдЙрдВрдЯрд░ рджреЗрдЦрддреЗ рд╣реИрдВред
рдорд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ 5 рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЗрдирдкреБрдЯ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред

рдпрджрд┐ рд╣рдо рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ Enter рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдХ рдХреЗ рдЧреБрдг рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред 45 рдкрд░ рдорд╛рди рд▓реАрдЬрд┐рдПред

рдХрдВрд╕реЛрд▓ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВред

TestC рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ 5 рдХрд╛ рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ - 45. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреИрдм рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдорд╛рди рдХреЛ 45 рдореЗрдВ рдмрджрд▓реЗрдВ, рдлрд┐рд░ рдХрдВрд╕реЛрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рдФрд░ рдирдП рдореВрд▓реНрдп рд╕рдорд╛рди рд╣реИрдВред :(
рд░реЗрдВрдбрд░рд░ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ?
рд╕рдорд╛рдзрд╛рди: React.memo ()
React.memo()
React v16.6 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдлреАрдЪрд░ рд╣реИред рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд
React.PureComponent
рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ
React.PureComponent
: рдШрдЯрдХ-рдХрд╛рд░реНрдпреЛрдВ рдХреЗ
React.PureComponent
рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП
React.memo(...)
рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП
React.PureComponent
ред
React.memo (...) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ?рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ред рдХрд╣реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рдХрд╛рд░реНрдп рд╣реИред
const Funcomponent = ()=> { return ( <div> Hiya!! I am a Funtional component </div> ) }
рд╣рдореЗрдВ рдХреЗрд╡рд▓ React.memo рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ FuncComponent рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
const Funcomponent = ()=> { return ( <div> Hiya!! I am a Funtional component </div> ) } const MemodFuncComponent = React.memo(FunComponent)
React.memo рдиреЗ MemodFuncComponent рдХреЛ
purified MemodFuncComponent
ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬреЗрдПрд╕рдПрдХреНрд╕ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЬрдм рдПрдХ рдШрдЯрдХ рдХреЗ рдЧреБрдг рдФрд░ рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреЗ рдкрд┐рдЫрд▓реЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЧреБрдгреЛрдВ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ TestC рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
let TestC = (props) => { console.log('Rendering TestC :', props) return ( <div> { props.count } </> ) } TestC = React.memo(TestC);
рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред DevTools рдЦреЛрд▓реЗрдВ рдФрд░ React рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВред
<Memo(TestC)>
рдЪрдпрди рдХрд░реЗрдВред
рдпрджрд┐ рджрд╛рдИрдВ рдУрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ 89 рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рд╣рдо рдореВрд▓реНрдп рдХреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ, 89 рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ ...

рдХреЛрдИ рдирд┐рд╡рд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛!
React.memo (...) рдХреА рдЬрдп! :)
рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
React.memo(...)
рдХрд╛ рдЙрдкрдпреЛрдЧ
React.memo(...)
рдмрд┐рдирд╛, TestC рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рддрдм рднреА рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд╕рдорд╛рди рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм,
React.memo(...)
рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдШрдЯрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
- рдЪрд▓реЛ рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛?
React.PureComponent
- рд╕рд┐рд▓реНрд╡рд░;React.memo(...)
- рд╕реЛрдирд╛;React.PureComponent
ES6 рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;React.memo(...)
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;React.PureComponent
ES6 рд╡рд░реНрдЧреЛрдВ рдХреЗ React.PureComponent
рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ;React.memo(...)
рдлрдВрдХреНрд╢рди React.memo(...)
рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ;- рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрдХреВрд▓рди рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ;
React
рдлрд┐рд░ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЗрдЦ рдпрд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА, рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдЖрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ
рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгреА, рдИрдореЗрд▓ рдпрд╛ рдирд┐рдЬреА рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрдиреЗ
рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рдзрдиреНрдпрд╡рд╛рдж!