
рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдпреВрдЖрдИ рдЬреИрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЗ рддреИрдпрд╛рд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдмрдЯрди, рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдЖрджрд┐ рдХреНрдпрд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реА рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рднреА рдкрд░рдорд╛рдгреБрдУрдВ рдХреЛ рдЙрдирдХреА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдПрдХрд▓ рдШрдЯрдХ рдмрдбрд╝реЗ рд╕рдордЧреНрд░ рдШрдЯрдХ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдФрд░ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╡рд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдореИрдВ рджреВрд╕рд░реА рдмрд╛рд░ рдЗрд╕рдореЗрдВ рд▓реМрдЯреВрдВрдЧрд╛ред
рдЧреАрдд
рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдореИрдВ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рд╣рдм рдкрд░ рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВрдиреЗ рдкрд╛рдардХ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдирд╣реАрдВред рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдкрд░ рдЕрдЧрд▓рд╛ рд▓реЗрдЦ (рдпрджрд┐ рдХреЛрдИ рд╣реИ) рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЕрдкрдиреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдпрджрд┐ рдПрдХ рд╣реИ) рдкрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╢рд░реНрддреЗрдВ:
- рдПрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ DOM рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рддрддреНрд╡ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
return (<div />)
ред рдПрдХ рдШрдЯрдХ рдЬреЛ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдШрдЯрдХ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдиреЗрддреНрд░рд╣реАрди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдкрд░рд┐рдЪрдп
рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдХреНрд╕рд░ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЗ рд╕рд╣рдХрд░реНрдореА "рдЗрд╕ рдШрдЯрдХ рдХреЛ рдХрд╣реАрдВ рднреА рднреЗрдЬрдирд╛" рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЙрдирд╕реЗ рдирд╛рд░рд╛рдЬрд╝ рд╣реИрдВ: тАЬрдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ! рдпрд╣ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ! " рдмреЗрд╢рдХ, рд╕реБрдзрд╛рд░ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рднреАред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ 4px рд╕реЗ 8px рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд╣рд╛рд░рд╛ рдлреЗрдВрдХрдиреЗ рдЬреИрд╕реЗ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдкрдЪрд╛рд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрд╡рдпрд╡реЛрдВ рдореЗрдВ рдХрд╕реНрдЯрдо рдмрд╛рд╣рд░реА рдЬреНрдпрд╛рдорд┐рддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдорджрдж рдХрд░реЗрдВ
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдЕрд░реНрде рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
src/Library/Controls.ts
ред рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯрд┐рдкреНрдкрдгреА рджреА рдЧрдИ рд╣реИ, рдиреАрдЪреЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
export interface VisualComponentProps {
рдпрд╣ рдШрдЯрдХ рд╕рд╣рд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдХреМрди-рдХреМрди рд╕реЗ? рд╕рднреА рджреГрд╢реНрдп рдШрдЯрдХред рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рдореВрд▓ рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд╕рд┐рдд рджреГрд╢реНрдп рдШрдЯрдХ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреБрд░рдВрдд рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рдкреНрд░реЙрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
children
React.Component рд╡рд░реНрдЧ рдХреЗ рдШрдЯрдХреЛрдВ, React.FC рдШрдЯрдХ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ React.FC рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрд╕рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВредclassName/style
рд╕рдорд╛рди рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп JSX'nom <div /> рдореЗрдВ рд╣реИред рд╣рдо рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдирд╛рдо рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдл рд▓рд┐рдВрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ редdoNotRender
рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рджрд░реНрджрдирд╛рдХ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк doNotRender
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдЦрд╝рд░рд╛рдм рдХрд░рддреЗ рд╣реБрдП, рд░реЗрдВрдбрд░ рддрд░реАрдХреЛрдВ рдореЗрдВ рдмреНрд░реЗрд╕реЗрд╕ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред 2 рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
рд╡рд░реНрдЬрд┐рди рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди:
App.tsx
renderComponent() { const {props, state} = this; const needRender = state.something; return ( <PageLayout> <UIButton children={'This is a button'} /> {needRender && <UIButton children={'This is another button'} /> } </PageLayout> ); }
рдЪрд╛рдб рдкреНрд░реЙрдкреНрд╕ doNotRender:
App.tsx
renderComponent() { const {props, state} = this; const needRender = state.something; return ( <PageLayout> <UIButton children={'This is a button'} /> <UIButton children={'This is another button'} doNotRender={!needRender} /> </PageLayout> ); }
рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдо рдиреАрдЪреЗ рдХреЗ рдмрдЯрди рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд░реНрде рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмреБрд░рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ 2 рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдФрд░ рднреА рдЦрд░рд╛рдм рд╣реИред
рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░, рдорд╛рдЗрдирд╕ рд╣реИ рдХрд┐ doNotRender рдЖрдВрдЦ рдирд╣реАрдВ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рддреБрд░рдВрдд рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдЕрдЧрд░ рд╣рдореЗрдВ
doNotRender true
рд╕рд╛рде null
рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд░рдирд╛ doNotRender true
, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ doNotRender true
, рддреЛ fallback
рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдПрдХреНрдЯ рд╕рд╕реНрдкреЗрдВрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдорд╛рди рдЕрд░реНрде рд╣реЛрддрд╛ рд╣реИ (рд╣рдо рд╢рдмреНрджрд╛рд░реНрде рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)
рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рд╣реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрдЯрди рдмрдирд╛рддреЗ рд╣реИрдВред
рдиреЛрдЯ: рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдореИрдВ рд╕реАрдПрд╕рдПрд╕-рдореЙрдбреНрдпреВрд▓, рдПрд╕рдПрдПрд╕ рдФрд░ рдХреНрд▓рд╛рд╕рдирд╛рдо рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
UIButton.tsx
import * as React from 'react'; import { VisualComponentProps } from 'Library/Controls'; import * as css from './Button.sass'; import cn from 'classnames';
App.tsx
renderComponent() { const {props, state} = this; const needRenderSecond = true; return ( <PageLayout> <UIButton children={'This is a button'} style={{marginRight: needRenderSecond ? 5 : null}} /> <UIButton disabled children={'This is another button'} doNotRender={!needRenderSecond} /> </PageLayout> ); }
рдкрд░рд┐рдгрд╛рдо:

рдЪрд┐рдВрддрди рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд┐рднрд┐рдиреНтАНрди рдЖрд╡рд░рдгреЛрдВ, рд░рдЪрдирд╛рдУрдВ, рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реБрдП,
рдЙрдирдореЗрдВ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдврд╛рдБрдЪреЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рдХрд░ рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЛрдИ рд╕рд╢рд░реНрдд рдкреАрд▓реЗ рдмрдЯрди рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдШрдЯрдХреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдХрд╛рдлреА рдмрд╛рд░ред "... рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЬреАрдирд╛ рдЪрд╛рд╣рд┐рдП! рд╣рдореЗрдВ рдЬреАрдирд╛ рдЪрд╛рд╣рд┐рдПред" рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реАрдПрд╕рдПрд╕ рдХреИрд╕реНрдХреЗрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╣рдореЗрд╢рд╛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреА рд╢реИрд▓реА рдмрд╕ рджреВрд╕рд░реЗ рдЪрдпрдирдХрд░реНрддрд╛ (рдпрд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд) рдХреА рдЙрдЪреНрдЪ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рд╕реНрдЯрд╛рдЗрд▓ рдмрд╕ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдЬреЛрдбрд╝реЗ (рд╢рд╛рдмреНрджрд┐рдХ) рдХреНрд╖рдг рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
- рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ doNotRender рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЛрд╣рд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рднреА рдЪрд▓рд╛рдПрдВрдЧреЗ, рдмрд╕ рд░реЗрдВрдбрд░ рдПрдХ рдХрдордмреИрдХ рдпрд╛ рдЕрд╢рдХреНрддрддрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдХреБрдЫ рдЬрдЯрд┐рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ, рдЖрдк рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдШрдЯрдХ рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
UIButton рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: UIButton рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ UIButtonInner рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
UIButton.tsx
export function UIButton(props: ButtonProps) { if (props.doNotRender) return props.fallback || null; return <UIButtonInner {...props} />; }
PS рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ UIButton рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рддреНрд░реБрдЯрд┐ рди рдХрд░реЗрдВ!
- рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЖрд╡рд░рдг рдФрд░ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдкрд░ рд╢реИрд▓реА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рддреЛ рдирд┐рдореНрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
Library/Controls.ts
export interface VisualComponentWrapperProps extends VisualComponentProps { wrappedVisual?: VisualComponentProps; }
рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧUIButton.tsx
interface ButtonSomeWrapperProps extends ButtonBasicProps, VisualComponentWrapperProps { myCustomProp?: number; } export function UIButtonSomeWrapper(props: ButtonSomeWrapperProps) { if (props.doNotRender) return props.fallback || null; const {
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмреИрд╕рд╛рдЦреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреА (рдШрдЯрдХ рдХреА рд╢реИрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП) рдФрд░ рд╕рд╣рд╛рд░рд╛, рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рд╡рд╣ рд╕рдм рд╣реИред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реАрдПрд╕рдПрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдШрдЯрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╛ рдореИрдВ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд▓рд┐рдЦреВрдВрдЧрд╛ред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред