рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдПрдХ рдХреМрд╢рд▓ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд░рд┐рдпрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреМрд╢рд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреА рдкрд╣рд▓реА рдиреМрдХрд░реА рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд╣ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЯреАрдо рдХрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЛ "рднрд░" рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЙрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдирд┐рдпреЛрдХреНрддрд╛, рдЬрдм рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВред рдХреЛрдб рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЙрд╕реЗ рди рдХреЗрд╡рд▓ рдорд╢реАрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЗрди рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИ, рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рддрдп рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
1. рд╡рд┐рдирд╛рд╢ рдЧреБрдг
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЧреБрдг (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЙрдиреНрд╣реЗрдВ "рдкреНрд░реЙрдкрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреА рд╕рдорд░реНрдерди рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдпрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрдХрд╛рдИ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдШрдЯрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЧреБрдг рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдирдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:
import React from 'react' import Button from 'components/Button' const MyComponent = ({ placeholder = '', style, ...otherProps }) => { return ( <Button type="button" style={{ border: `1px solid ${placeholder ? 'salmon' : '#333'}`, ...style, }} {...otherProps} > Click Me </Button> ) } export default MyComponent
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдЬрд┐рд╕реЗ рдореИрдВ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди
authenticate
, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
token
рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ
jwt_token
рд╕рдВрд╕реНрдерд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб
token
рдкрд╣реБрдВрдЪрдиреЗ рдкрд░
jwt_token
рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирддреАрдЬрддрди, рдЕрдЧрд░
jwt_token
рдПрдХ рд╡реИрдз рдЯреЛрдХрди рдирд┐рдХрд▓рд╛, рдФрд░
token
рдЗрдХрд╛рдИ
undefined
, рддреЛ
jwt_token
рдорд╛рди
token
рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐
token
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдореВрд▓реНрдп рдерд╛ рдЬреЛ рдЬреЗрдПрд╕ рдирд┐рдпрдореЛрдВ (рдпрд╛рдиреА рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЛрдХрди) рджреНрд╡рд╛рд░рд╛ рдЧрд▓рдд рдирд╣реАрдВ рдерд╛, рддреЛ
token
рдореЗрдВ рдмрд╕ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред
2. рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦреЗрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
- src
- рдШрдЯрдХреЛрдВ
- Breadcrumb.js
- CollapsedSeparator.js
- рдЗрдирдкреБрдЯ
- index.js
- Input.js
- utils.js
- focusManager.js
- рдХрд╛рд░реНрдб
- index.js
- Card.js
- CardDivider.js
- Button.js
- Typography.js
рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдореЗрдВ рд╡рд┐рднрд╛рдЬрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
CollapsedSeparator
рдШрдЯрдХ
Breadcrumb.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕реНрд╡рд╛рдореА рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
Breadcrumb
рдФрд░
Breadcrumb
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ - рдпрджрд┐
CollapsedSeparator
рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ
Breadcrumb
рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдмреАрдЪ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрдЯрдХ рдирд╛рдо рдореЗрдВ рдПрдХ
Breadcrumb
рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ
BreadcrumbCollapsedSeparator.js
рддрд░рд╣ рдирд╛рдо рдХреЛ рдХреБрдЫ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдБрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
Breadcrumb
рдФрд░
Breadcrumb
рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ
Input
рдФрд░
Card
рдЬреИрд╕реЗ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░, рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреНрдпреЛрдВ рд╣реИред рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдХреНрдпрд╛ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдирд╛ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдирддреАрдЬрддрди, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдирдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддреЗ рд╣реИрдВред рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рд▓реЗрдЦрди рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдЯреАрдХ рд╡рд┐рдкрд░реАрдд рдкреНрд░рднрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдирдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рддреБрд░рдВрдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рд░ рд╕рдордЭрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪреА-рд╕рдордЭреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
- src
- рдмреНрд░реЗрдбрдХреНрд░рдореНрдм
- index.js
- Breadcrumb.js
- CollapsedSeparator.js
- рдЗрдирдкреБрдЯ
- index.js
- Input.js
- utils.js
- focusManager.js
- рдХрд╛рд░реНрдб
- index.js
- Card.js
- CardDivider.js
- Button.js
- Typography.js
рдЕрдм рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐
Breadcrumb
рдШрдЯрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрд┐рддрдиреЗ рдШрдЯрдХ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдЬрдм рддрдХ рдЙрдирдХреА рдлрд╛рдЗрд▓реЗрдВ
Breadcrumb.js
рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ
Breadcrumb
рдШрдЯрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ:
- src
- рдмреНрд░реЗрдбрдХреНрд░рдореНрдм
- index.js
- Breadcrumb.js
- CollapsedSeparator.js
- Expander.js
- BreadcrumbText.js
- BreadcrumbHotdog.js
- BreadcrumbFishes.js
- BreadcrumbLeftOvers.js
- BreadcrumbHead.js
- BreadcrumbAddict.js
- BreadcrumbDragon0814.js
- BreadcrumbContext.js
- рдЗрдирдкреБрдЯ
- index.js
- Input.js
- utils.js
- focusManager.js
- рдХрд╛рд░реНрдб
- index.js
- Card.js
- CardDivider.js
- Button.js
- Typography.js
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:
import React from 'react' import Breadcrumb, { CollapsedSeparator, Expander, BreadcrumbText, BreadcrumbHotdog, BreadcrumbFishes, BreadcrumbLeftOvers, BreadcrumbHead, BreadcrumbAddict, BreadcrumbDragon0814, } from '../../../../../../../../../../components/Breadcrumb' const withBreadcrumbHotdog = (WrappedComponent) => (props) => ( <WrappedComponent BreadcrumbHotdog={BreadcrumbHotdog} {...props} /> ) const WorldOfBreadcrumbs = ({ BreadcrumbHotdog: BreadcrumbHotdogComponent, }) => { const [hasFishes, setHasFishes] = React.useState(false) return ( <BreadcrumbDragon0814 hasFishes={hasFishes} render={(results) => ( <BreadcrumbFishes> {({ breadcrumbFishes }) => ( <BreadcrumbLeftOvers.Provider> <BreadcrumbHotdogComponent> <Expander> <BreadcrumbText> <BreadcrumbAddict> <pre> <code>{JSON.stringify(results, null, 2)}</code> </pre> </BreadcrumbAddict> </BreadcrumbText> </Expander> {hasFishes ? breadcrumbFishes.map((fish) => ( <> {fish} <CollapsedSeparator /> </> )) : null} </BreadcrumbHotdogComponent> </BreadcrumbLeftOvers.Provider> )} </BreadcrumbFishes> )} /> ) } export default withBreadcrumbHotdog(WorldOfBreadcrumbs)
3. рдирд╛рдордХрд░рдг рдорд╛рдирдХ рдирд╛рдордХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ
рдХреБрдЫ рдорд╛рдирдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдШрдЯрдХреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓реЗрдЦрдХ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдШрдЯрдХреЛрдВ (HOC) рдХреЗ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ рдЙрдкрд╕рд░реНрдЧ рдХреЗ
with
ред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрди рдШрдЯрдХ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
import React from 'react' import hoistNonReactStatics from 'hoist-non-react-statics' import getDisplayName from 'utils/getDisplayName' const withFreeMoney = (WrappedComponent) => { class WithFreeMoney extends React.Component { giveFreeMoney() { return 50000 } render() { return ( <WrappedComponent additionalMoney={[ this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), ]} {...this.props} /> ) } } WithFreeMoney.displayName = `withFreeMoney(${getDisplayName( WrappedComponent, )}$)` hoistNonReactStatics(WithFreeMoney, WrappedComponent) return WithFreeMoney } export default withFreeMoney
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреЛрдИ рдЗрд╕ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:
import React from 'react' import hoistNonReactStatics from 'hoist-non-react-statics' import getDisplayName from 'utils/getDisplayName' const useFreeMoney = (WrappedComponent) => { class WithFreeMoney extends React.Component { giveFreeMoney() { return 50000 } render() { return ( <WrappedComponent additionalMoney={[ this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), this.giveFreeMoney(), ]} {...this.props} /> ) } } WithFreeMoney.displayName = `useFreeMoney(${getDisplayName( WrappedComponent, )}$)` hoistNonReactStatics(WithFreeMoney, WrappedComponent) return WithFreeMoney } export default useFreeMoney
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реИред рддрдХрдиреАрдХреА рдирд╛рдо рд╕реЗ, рд╕рд╣реА, рдпрд╣рд╛рдБ рдирд╛рдо рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рд▓реЗрдХрд┐рди
use
рдЙрдкрд╕рд░реНрдЧ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЬрдм
рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХрд╛ рдирд╛рдордХрд░рдгред рдирддреАрдЬрддрди, рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдХрд┐рд╕реА рдФрд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЙрд╕рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рдВрднрд╡рддрдГ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рдорд╛рдирдХреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
4. рдмреБрд▓рд┐рдпрди рдЯреНрд░реИрдкреНрд╕ рд╕реЗ рдмрдЪреЗрдВ
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЖрджрд┐рдо рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдирд┐рд░реНрдгрдп рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдХреА рдЦрд░рд╛рдм рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдШрдЯрдХреЛрдВ рдпрд╛ рдЕрдиреНрдп рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛ, рдЗрд╕рдХрд╛ рд╕рдЯреАрдХ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ рдПрдХ
Typography
рдШрдЯрдХ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
'h1'
,
'h2'
,
'h3'
,
'h4'
,
'h5
',
'h6'
,
'title'
,
'subheading'
ред
рдпрджрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдШрдЯрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛?
const App = () => ( <Typography color="primary" align="center" subheading title> Welcome to my bio </Typography> )
рдЬрд┐рдиреНрд╣реЗрдВ рд░рд┐рдПрдХреНрдЯ (рдпрд╛ рдмрд▓реНрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде) рдХрд╛ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ, рд╡реЗ рдкрд╣рд▓реЗ рд╣реА рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
title
рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг
subheading
рд╡рд┐рдХрд▓реНрдк рдХреЛ
subheading
рджреЗрдЧрд╛ред рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЛрдб рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
title
рд╡рд┐рдХрд▓реНрдк рдпрд╛
subheading
рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдХрд▓реНрдк рдХрд┐рд╕ рд╕реАрдорд╛ рддрдХ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
.title { font-size: 1.2rem; font-weight: 500; text-transform: uppercase; } .subheading { font-size: 1.1rem; font-weight: 400; text-transform: none !important; }
рднрд▓реЗ рд╣реА
title
рдЬреАрддрддрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рд╕реАрдПрд╕рдПрд╕
text-transform: uppercase
рдирд┐рдпрдо рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣
text-transform: none !important
рдХреА рдЙрдЪреНрдЪ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ
text-transform: none !important
рдпрджрд┐ рдЖрдк рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдирд╣реАрдВ рдмрд░рддрддреЗ рд╣реИрдВ, рддреЛ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ - рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХреЛрдб рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдШрдЯрдХ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди
Typography
рдШрдЯрдХ рдХреЗ рдХреНрд▓реАрдирд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
const App = () => <Typography variant="title">Welcome to my bio</Typography>
рдпрд╣рд╛рдБ
Typography
рдШрдЯрдХ рдХреЛрдб рд╣реИ:
import React from 'react' import cx from 'classnames' import styles from './styles.css' const Typography = ({ children, color = '#333', align = 'left', variant, ...otherProps }) => { return ( <div className={cx({ [styles.h1]: variant === 'h1', [styles.h2]: variant === 'h2', [styles.h3]: variant === 'h3', [styles.h4]: variant === 'h4', [styles.h5]: variant === 'h5', [styles.h6]: variant === 'h6', [styles.title]: variant === 'title', [styles.subheading]: variant === 'subheading', })} > {children} </div> ) }
рдЕрдм, рдЬрдм
App
рдШрдЯрдХ рдореЗрдВ рд╣рдо
Typography
рдШрдЯрдХ
variant="title"
, рддреЛ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓
title
рдШрдЯрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдШрдЯрдХ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред
рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд░рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
if/else
:
let result if (variant === 'h1') result = styles.h1 else if (variant === 'h2') result = styles.h2 else if (variant === 'h3') result = styles.h3 else if (variant === 'h4') result = styles.h4 else if (variant === 'h5') result = styles.h5 else if (variant === 'h6') result = styles.h6 else if (variant === 'title') result = styles.title else if (variant === 'subheading') result = styles.subheading
рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдореБрдЦреНрдп рддрд╛рдХрдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const result = styles[variant]
5. рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕реНрдкрд╖реНрдЯ рддрдВрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд╛рдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
рд░рд┐рдПрдХреНрдЯ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рддреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ:
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд╛рдХрдд рдХреЛ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕рд░рд▓ рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдмрд╛рдд рдЖрдиреЗ рдкрд░ рдЙрдирдХреА рд╕реБрдВрджрд░рддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ:
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдбрд┐рдЬрд╝рд╛рдЗрди рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдкрд╕рдВрдж рдЖрдПрдВрдЧреЗред
6. рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реБрдХ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдп рд░рдЦреЗрдВ
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рд╣реБрдХ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реБрдХ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ "рдлреБрд▓рд╛рдпрд╛" рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрдврд╝рдиреЗ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рдардХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╣реИред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣реБрдХ рдХреЗ рдмрд╛рд╣рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдХреЛрдб рд░реАрдбрд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рджреЗрдЧрд╛ рдХрд┐ рд╣реБрдХ рдХрд┐рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
import React from 'react' const initialState = { initiated: false, images: [], } const reducer = (state, action) => { switch (action.type) { case 'initiated': return { ...state, initiated: true } case 'set-images': return { ...state, images: action.images } default: return state } } const usePhotosList = ({ imagesList = [] }) => { const [state, dispatch] = React.useReducer(reducer, initialState) const removeFalseyImages = (images = []) => images.reduce((acc, img) => (img ? [...acc, img] : acc), []) React.useEffect(() => { const images = removeFalseyImages(imagesList) dispatch({ type: 'initiated' }) dispatch({ type: 'set-images', images }) }, []) return { ...state, } } export default usePhotosList
рдпрджрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
removeFalseyImages
рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣реБрдХ рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
7. рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рд▓рдЧрд╛рддрд╛рд░ рд░рд╣реЗрдВ
рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ рд╣реИ рдЬреЛ рдЕрдХреНрд╕рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:
- рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдЯреАрдоред
- рдШрдЯрдХреЛрдВ, рд╣реБрдХ, рдЙрдЪреНрдЪ рдХреНрд░рдо рдШрдЯрдХреЛрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдордХрд░рдгред
рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдХрднреА-рдХрднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
import App from './App' export { default as Breadcrumb } from './Breadcrumb' export default App
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рднреА рдкрд╕рдВрдж рд╣реИ:
export { default } from './App' export { default as Breadcrumb } from './Breadcrumb'
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рднреА рдЪреБрдирддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд╛рдо рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдиреЗ рд╣реБрдХ рдХреЛ
useApp
рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо
useApp
, рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╣реБрдХ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕реА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рдП - рдЙрдкрдпреЛрдЧ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╣реБрдХ рдХрд╛ рдирд╛рдо
useController
рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
рдпрд╣рд╛рдБ рдЗрди рд╣реБрдХреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
import React from 'react' import useApp from './useApp' import basicController from './basicController' const App = () => { const app = useApp() const controller = basicController() return ( <div> {controller.errors.map((errorMsg) => ( <div>{errorMsg}</div> ))} </div> ) } export default App
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
basicController
рд╣реИ рдХрд┐
basicController
рдПрдХ рд╣реБрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
useApp
рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЖрдпрд╛рдд рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд░рдгрдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд╕рдм рдХреБрдЫ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
const app = useApp() const controller = useBasicController()
рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЗрдХрд╛рдИ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?
