
рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!
рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЗрдВрдЯ рдбреЛрдбреНрд╕
рдХреЗ рд▓реЗрдЦ
"5 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬрд┐рдиреНрд╣реЗрдВ
рдореИрдВ рдмрд┐рдирд╛ рдХреЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдБ
редрдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред
5 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВ, рдореБрдЭреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдХреБрдЫ HTML рдФрд░ рд╕реАрдПрд╕рдПрд╕ рднреАред рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдЬреЗрдПрд╕ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддрд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП - рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдпрд╛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧред
рдпрд╣рд╛рдВ 5 рдЬреЗрдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛ред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВред рдмреЗрд╢рдХ, "рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛" рдПрдХ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рд╣реИред рдпреЗ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИрдВ рдФрд░ рд╣рд░ рд╕рдордп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред
1. рдкреБрдирд░реНрдЧрдарди
рдореИрдВ рд▓рдЧрднрдЧ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рд╣реИ рдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ; рдкреБрдирд░реНрдЧрдарди рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
const address = { city: 'Salt Lake City', state: 'UT', zip: 84115, coords: { lat: 40.776608, long: -111.920485, }, }
рдпрд╣рд╛рдБ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
const info = { title: 'Once Upon a Time', protagonist: { name: 'Emma Swan', enemies: [ {name: 'Regina Mills', title: 'Evil Queen'}, {name: 'Cora Mills', title: 'Queen of Hearts'}, {name: 'Peter Pan', title: `The boy who wouldn't grow up`}, {name: 'Zelena', title: 'The Wicked Witch'}, ], }, }
2. рдореЙрдбреНрдпреВрд▓
рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рд▓рдЧрднрдЧ рд╣рд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореЙрдбреНрдпреВрд▓ рднрд╛рд╖рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореЙрдбреНрдпреВрд▓ (рдФрд░ рд░реЛрд▓рдЕрдк рдпрд╛ рд╡реЗрдмрдкреИрдХ рдЬреИрд╕реЗ рдмрд┐рд▓реНрдбрд░реЛрдВ) рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореЗрд░рд╛ рдпреВрдЯреНрдпреВрдм рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ -
"рдЬрд┐рддрдирд╛ рдЖрдк рдИрдПрд╕ 6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ"ред3. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдореИрдВ рд╣рд░ рд╕рдордп рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдФрд░ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкреБрдирд░реНрдЧрдарди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const bench = {type: 'Piano', adjustable: false} const {legs = 4} = bench
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмреЗрдВрдЪ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреИрд░реЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛, рдкреИрд░ рдХрд╛ рдореВрд▓реНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛ред
рдЖрдк рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const bench = {type: 'Piano', adjustable: false} const {legs: legCount = 4} = bench
рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдореЗрдВ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
function getDisplayName(firstName = 'Unknown', lastName = 'Unknown') { return `${firstName} ${lastName}` }
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "=" рдЪрд┐рд╣реНрди рдХреЗ рджрд╛рдИрдВ рдУрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function getCandy( kind = requiredParam('kind'), size = requiredParam('size'), upperKind = kind.toUpperCase(), callback = function noop() {}, ) { const result = {kind, size, upperKind} callback(result) return result } function requiredParam(argName) { throw new Error(`${requiredParam} is required`) }
рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╡реЗ рд╕рд╣реА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!
рдУрд╣, рдФрд░ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░реА рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ)? рдорд╣рд╛рди, рд╕рд╣реА?
4. рддреАрд░ рдХреЗ рдХрд╛рд░реНрдп
рдореИрдВ рдЕрдХреНрд╕рд░ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рдЕрдирд╛рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдореИрдВ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ), рдпрд╛ рдореИрдВ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдмрд╕ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред
рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:
const divide = (a, b) => a / b const getFive = () => 5 const identity = i => i const asArray = (...args) => args
5. рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
JS рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИ рдФрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо (рдХреЙрд▓ рд╕реНрдЯреИрдХ) рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ
рдХрд┐ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреНрдпрд╛ рд╣реИ? (рд░реВрд╕реА рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде)ред рд╡рд╛рджреЗ рдФрд░ async / рдЗрдВрддрдЬрд╛рд░ рдпрд╣ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИрдВред рдореЗрд░рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдФрд░ рдпреЗ рдЙрдкрдХрд░рдг рдореЗрд░реЗ рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╡рд╛рджреЗ рдПрдХ рдЧрдВрднреАрд░ рд╡рд┐рд╖рдп рд╣реИрдВ рдФрд░ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдорд╣рд╛рди рд╣реИрдВред
рдореИрдВ рдЕрдХреНрд╕рд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмреИрдХрдПрдВрдб рдореЗрдВ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
test('Can fill out a form across multiple pages', async () => { mockSubmitForm.mockResolvedValueOnce({success: true}) const testData = {food: 'test food', drink: 'test drink'} const {findByLabelText, findByText} = render(<App />) user.click(await findByText(/fill.*form/i)) user.type(await findByLabelText(/food/i), testData.food) user.click(await findByText(/next/i)) user.type(await findByLabelText(/drink/i), testData.drink) user.click(await findByText(/review/i)) expect(await findByLabelText(/food/i)).toHaveTextContent(testData.food) expect(await findByLabelText(/drink/i)).toHaveTextContent(testData.drink) user.click(await findByText(/confirm/i, {selector: 'button'})) expect(mockSubmitForm).toHaveBeenCalledWith(testData) expect(mockSubmitForm).toHaveBeenCalledTimes(1) user.click(await findByText(/home/i)) expect(await findByText(/welcome home/i)).toBeInTheDocument() })
рдпрд╣рд╛рдБ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдореЗрдВ async \ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
async function getListItems(req, res) { const listItems = await listItemsDB.query({ownerId: req.user.id}) res.json({listItems: await expandBookDataMultiple(listItems)}) }
рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ, рдореИрдВ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдХреЛрдб (рдХрдо рд╕реЗ рдХрдо рд╕реАрдзреЗ) рдореЗрдВ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдЕрдзрд┐рдХрд╛рдВрд╢ "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реНрдХ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЦреБрдж рдХреЛ рдПрдХ рдХреЙрд▓ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ:
React.useEffect(() => { getUser().then( user => setState({status: 'success', error: null, user}), error => setState({status: 'error', error, user: null}), ) }, [])
рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдПрдВрдердиреА рдЪреВ
"рдЕрд╕реЛрдб / рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рдиреЛрдб" рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВ
редрдирд┐рд╖реНрдХрд░реНрд╖
рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рд╣реИрдВ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдЙрдирдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВред рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рдирдП рдЬреЛрдбрд╝ рднреА рд╣реИрдВ рдЬреЛ рдЕрднреА рддрдХ рдореЗрд░реА рдорд╛рдВрд╕рдкреЗрд╢реА рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░ рдкрд╛рдП рд╣реИрдВред рдЕрдм JS рдбреЗрд╡рд▓рдкрд░ рдмрдирдиреЗ рдХрд╛ рд╕рдордп рд╣реИ! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛! рд╕реМрднрд╛рдЧреНрдп рд╣реИ