рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╢рд╛рдВрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЗрд╕рдиреЗ рдЬрдмрд░рджрд╕реНрдд рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдо рдХреЛрдб рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЬреЛ рдкреИрдХреЗрдЬ рд╣реИрдВ, рд╡реЗ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╣реИрдВ react
, react-dom
, events
рдФрд░ react-reconciler
ред
рд╣рдо рдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ react
рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╣реИред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ - рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЬрд╛рдУред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдЗрд╕ рдкреИрдХреЗрдЬ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░рд╛ рдЧреИрдЬреЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
function App() { const [text, changeText] = React.useState('Initial'); return ( <div className="app"> <span>{text}</span> <input type="text" value={text} onInput={(e) => changeText(e.target.value)} /> </div> ); } ReactDOM.render( <App />, document.getElementById('root') ) ;
рдЖрдЗрдП рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣рд╛рдБ рд╣рдо рд╣реБрдХ рдХреА рдХреЙрд▓ рдХреЛ React.useState('Initial')
рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, React.useState('Initial')
рдПрдХ рд╕рд╛ рдФрд░ рдкреЗрдЬ рдкрд░ рдпрд╣ рд╕рдм рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреА рдХреЙрд▓ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдВрддрд┐рдо рдХреЛрдб рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдП, рдЗрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреИрдмрд▓ рдХреЗ рд╕рд╛рдеред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
return React.createElement( "div", { className: "app" }, React.createElement("span", null, text), React.createElement("input", { type: "text", value: text, onInput: function onInput(e) { return changeText(e.target.value); } }) );
рдХреМрди рдкреНрд░рдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдмрдмрд▓ рдХреЛрдб рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ - рдмреИрдмрд▓ рд░рд┐рдкреНрд▓рд╛рдИ ред
React.createElement
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ React.createElement()
рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрд▓ React.createElement()
ред рд╣рдо рдЗрд╕реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдпрд╛ рдЖрдк рдлрд╛рдЗрд▓ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - ReactElement.js )ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЙрдкреНрд╕ рд╣реИрдВ (рдХреЛрдб рдореЗрдВ, рдЬрд┐рд╕ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╣рдордиреЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ config
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЕрдЧрд▓рд╛, рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ key
рдФрд░ ref
рдкреНрд░реЙрдкреНрд╕ рд╣реИрдВ рдЬреЛ undefined
рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдПрдВред
if (hasValidKey(config)) { key = '' + config.key; }
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ config.key
рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ config.key
рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ .toString()
рдпрд╛ .valueOf()
рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓реЗ рдЪрд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
- рдЙрд╕ рддрддреНрд╡ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдЬреЛ рддрддреНрд╡ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;
- рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣рд╛рдВ
children
рдЬреЛрдбрд╝реЗрдВ; - рд╣рдо рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рдЬрдм рд╣рдордиреЗ рд╕рднреА рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
{ // This tag allows us to uniquely identify this as a React Element $$typeof: REACT_ELEMENT_TYPE, // Symbol // Built-in properties that belong on the element type: type, key: key, ref: ref, props: props, // Record the component responsible for creating this element. _owner: owner, }
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $$typeof
рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдкреНрд░рддреАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЦрд┐рд╕рдХреЗрдВ, рдЬреЛ рд╡рд╕реНрддреБ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред
type
рдЧреБрдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ App()
рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд▓рд╛рдЗрдиреЗрдВ 'div'
, 'span'
рдФрд░ 'input'
ред
key
рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╡рд╣реА рдХреБрдВрдЬреА рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЪреЗрддрд╛рд╡рдиреА рдХрдВрд╕реЛрд▓ рдкрд░ рдЙрдбрд╝рддреА рд╣реИред
рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рд╡рд╣ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдордиреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, children
рдФрд░ defaultProps
рдореЗрдВ рдХреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред ref
рд╕рд╛рде рд╕рд╣реА рдХрд╛рдо рдХреЗ рд▓рд┐рдП _owner
рд╕рдВрдкрддреНрддрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрд┐рдд, React.createElement(App, null)
рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
{ $$typeof: REACT_ELEMENT_TYPE, type: App, key: null, ref: null, props: {}, _owner: null, }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЗрд╡ рдореЛрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрдВрджрд░ рд╕реНрдЯреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
_source: { fileName: "/Users/appleseed/react-example/src/index.js", lineNumber: 7 }

рдКрдкрд░ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рджреЗрдЦрд╛, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред react
рдкреИрдХреЗрдЬ рд╣рдорд╛рд░реЗ рдФрд░ рдмрд╛рдХреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкрд░ рдЖрдЧреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдХреЙрд▓ рдХреЛ рдРрд╕реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реБрд▓рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдПред
React.useState
рд╕рдВрд╕реНрдХрд░рдг 16.8 рдореЗрдВ, рд╣реБрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЖрдк рд▓рд┐рдВрдХ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ react
рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрдпрд╛ рдирд┐рд╣рд┐рдд рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдкреИрдХреЗрдЬ рдПрдХ рдореБрдЦреМрдЯрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рддрдХ рдЬрд╛рддреА рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, useState
рдХрд░рдирд╛ рдХреЛрдб рдХреА рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ:
export function useState<S>(initialState: (() => S) | S) { const dispatcher = resolveDispatcher(); return dispatcher.useState(initialState); }
рд╢реЗрд╖ рд╣реБрдХ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдбрд┐рд╕реНрдкреИрдЪрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП useState
ред рдпрд╣ рдбрд┐рд╕реНрдкреИрдЪрд░ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рд╣реИ рдпрд╛ рд╣рдо рдмрд╕ рдШрдЯрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╣реБрдХ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ react-reconciler
рдкреИрдХреЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ
рдПрдХ рдмрд╛рдд рдФрд░ред рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреИрдХреЗрдЬ рдХреЛ рдХреНрдпреЛрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдмреБрд▓рдмреБрд▓реЗ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЛ рдкрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ React
рдЪрд░ рд╣реЛред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреАрдо рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ (рдФрд░ рдпрд╣реА рдирд╣реАрдВ) рдФрд░ рдЕрдм createElement
рдЬрдЧрд╣ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢: рджреЛ - jsx
рдФрд░ jsx
рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рд╡рд░реНрддрдорд╛рди рдкрджреНрдзрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рд╣рдордиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ
createElement
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ children
рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЙрди рдмрдЪреНрдЪреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (3 рддрд░реНрдХ рдФрд░ рдЖрдЧреЗ)ред рдЕрдм рдЗрд╕реЗ jsx
рдХреЛ javascript
рдХреЙрд▓реНрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдПрд▓реАрдореЗрдВрдЯ рдмрдирд╛рдирд╛ рдЕрдХреНрд╕рд░ рдлрдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рд░ рдмрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░реЙрдкрд░ рдореЙрдбрд┐рдлрд┐рдХреЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИ; - рдЖрдк
React
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, import { jsx } from 'react'
), рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рди рд╣реЛрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ React
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ createElement
рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднреА рдореБрдлрд╝реНрдд рдирд╣реАрдВ рд╣реИ; - рд╣рдордиреЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рд╣рдо
key
рдХреЛ рдкреНрд░реЙрдкрд░ рд╕реЗ рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЧреЗ рднреЗрдЬрддреЗ рд╣реИрдВред рдЕрдм рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ jsx
рд╕реЗ key
рд▓реЗрдирд╛ рдФрд░ рддрддреНрд╡ рдирд┐рд░реНрдорд╛рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ рдпрд╣рд╛рдБ react
рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА jsx
рдФрд░ jsxs
ред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд░рд┐рдПрдХреНрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, enableJSXTransformAPI
рдлреНрд▓реИрдЧ рдХреЛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП ReactFeatureFlags.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реА рд╕реЗ shared
рдФрд░ рдирдП API рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ ( yarn build
) рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред
рдЕрдиреНрдд
рдЗрд╕ рдкрд░ рдореИрдВ react
рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЬ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ react-dom
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ react-dom
рдХреНрдпрд╛ react
рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!