Π Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠ±ΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΡΠ»ΠΈ Π² ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ
ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΠΏΡ
className
, Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ css-ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ css-ΠΊΠ»Π°ΡΡΡ, Π½ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΈΡ . - ΠΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ className Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ classnames
- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ css-ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΠΠ
- ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΡΠ±ΡΡ ΠΏΡΠΎΠΏΡΠΎΠ²
- ΠΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ (ΡΠΎ Π΅ΡΡΡ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ, Π° Π»ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π½Π°Π²Π΅ΡΡ . Π ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΠΏΡΠ°ΠΌ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ)
- ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΏΡΠΎΠ²
React.InputHTMLAttributes<HTMLElement>
Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΌΠ΅ΡΡ ΠΈΡ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ - ΠΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΡΠ½ΡΠΉ export, Π½Π΅ default.
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΠΎΠ°Π΄Π΅Ρ
ΠΠ°ΠΊΠ΅ΡΡ Π»ΠΎΠ°Π΄Π΅ΡΠ°: GitHub, E-commerce, Food, Crypto
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
/** ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π»ΠΎΠ°Π΄Π΅ΡΠ° */
enum LoaderSize {
s = 's',
m = 'm',
l = 'l'
}
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Loader */
type LoaderProps = {
/**
* ΠΠ΄Π΅Ρ Π»ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ°.
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ - true, Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
* ΠΡΠ»ΠΈ false, ΡΠΎ Π»ΠΎΠ°Π΄Π΅Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ
*/
loading?: boolean;
/**
* Π Π°Π·ΠΌΠ΅Ρ Π»ΠΎΠ°Π΄Π΅ΡΠ°. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΏΡΠ°, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ css-ΠΊΠ»Π°ΡΡ loader_size-{size}
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: ΡΠ°Π·ΠΌΠ΅Ρ - LoaderSize.m, css-ΠΊΠ»Π°ΡΡ - loader_size-m
*/
size?: LoaderSize;
/**
* ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ CSS-ΠΊΠ»Π°ΡΡΡ.
*/
className?: string;
};
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
<Loader /> // ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π»ΠΎΠ°Π΄Π΅Ρ
<Loader size={LoaderSize.l} /> // Π»ΠΎΠ°Π΄Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° L
<Loader loading={isLoading} /> // Π»ΠΎΠ°Π΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ isLoading=false
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ WithLoader.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΡΠ΅Π³Π΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ (children)
- ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ loading=true ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Loader
- ΠΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Loader
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ WithLoader */
export type WithLoaderProps = React.PropsWithChildren<{
loading: boolean;
}>;
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
<WithLoader loading={isLoading}>
<div>Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π²Π΅ΡΡΡΠΊΠ° Π½Π°ΡΠ΅ Π²ΡΠ΅!</div>
</WithLoader>
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΠ½ΠΎΠΏΠΊΠ°.
ΠΠ°ΠΊΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ: GitHub, E-commerce, Food, Crypto
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ½ΠΎΠΏΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ html-ΡΠ΅Π³ button ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ Π΅Π³ΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ html-Π°ΡΡΠΈΠ±ΡΡΡ
- ΠΠ½ΠΎΠΏΠΊΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΎΠΏΡΡ ButtonProps ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅
- Π’Π΅ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ/Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ children
- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ css-ΠΊΠ»Π°ΡΡΠΎΠ²:
- ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ:
.button
- ΠΠ»Π°ΡΡ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ:
.button_disabled
- ΠΠ»Π°ΡΡ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠ°ΡΠΊΡΠ°ΡΠΊΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ:
.button_color-primary
,.button_color-secondary
- ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ:
/** ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ°ΡΠΊΡΠ°ΡΠΊΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ */
enum ButtonColor {
/** ΠΡΠ½ΠΎΠ²Π½Π°Ρ, Π°ΠΊΡΠ΅Π½ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° */
primary = 'primary',
/** ΠΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° */
secondary = 'secondary'
}
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Button */
export type ButtonProps = React.PropsWithChildren<{
/**
* ΠΡΠ»ΠΈ true, ΡΠΎ Π²Π½ΡΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ children ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Loader
* Π’Π°ΠΊΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ disabled
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ - false
*/
loading?: boolean;
/** Π¦Π²Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ - ButtonColor.primary*/
color?: ButtonColor;
}> & React.ButtonHTMLAttributes<HTMLButtonElement>;
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΠΠ½ΠΎΠΏΠΊΠ° Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ "ΠΡΠΏΡΠ°Π²ΠΈΡΡ", Π»ΠΎΠ³ΠΈΡΡΡΡΠ°Ρ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ "ΠΠΈΡΡΠΌΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ" ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅
<Button onClick={() => console.log('ΠΠΈΡΡΠΌΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ')}>
ΠΡΠΏΡΠ°Π²ΠΈΡΡ
</Button>
// ΠΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Loader ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠ°ΠΊΠΈΡ
-ΡΠΎ Π΄Π°Π½Π½ΡΡ
<Button
color={ButtonColor.secondary}
loading={isLoading}
>
ΠΡΠΏΡΠ°Π²ΠΈΡΡ
</Button>
// ΠΠ½ΠΎΠΏΠΊΠ° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ
<Button>
<span>ΠΠΎΠ΄Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°</span>
</Button>
// ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ
<Button className="some-outer-class" disabled>
ΠΡΠΏΡΠ°Π²ΠΈΡΡ
</Button>
// ΠΠ½ΠΎΠΏΠΊΠ° Ρ ΠΏΡΠΎΠΏΡΠΎΠΌ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ
<Button onMouseOver={() => console.log('Π£Π±Π΅ΡΠΈ ΠΎΡ ΠΌΠ΅Π½Ρ ΠΊΡΡΡΠΎΡ!')}>
ΠΡΠΏΡΠ°Π²ΠΈΡΡ
</Button>
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΠ°ΡΡΠΎΡΠΊΠ° (ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°).
ΠΠ°ΠΊΠ΅ΡΡ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ: GitHub, E-commerce, Food, Crypto
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ html-ΡΠ΅Π³ img
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Card */
type CardProps = {
/** URL ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ */
image: string;
/** ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ */
title: React.ReactNode;
/** ΠΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ */
subtitle: React.ReactNode;
/** Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ (ΡΡΡΠ΅Ρ/Π±ΠΎΠΊΠΎΠ²Π°Ρ ΡΠ°ΡΡΡ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ */
content?: React.ReactNode;
/** ΠΠ»ΠΈΠΊ Π½Π° ΠΊΠ°ΡΡΠΎΡΠΊΡ */
onClick?: React.MouseEventHandler;
};
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΠΡΠΎΡΡΠ°Ρ ΠΊΠ°ΡΡΠΎΡΠΊΠ°
<Card
image="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
title="ΠΠ°Π½Π΄Π°ΡΠΈΠ½"
subtitle="ΠΠ°ΡΠΎΠΊΠΊΠΎ"
onClick={() => console.log('ΠΠ°Π½Π΄Π°ΡΠΈΠ½ ΠΊΡΠΏΠ»Π΅Π½!')}
/>
// ΠΠ°ΡΡΠΎΡΠΊΠ° Ρ Π΄ΠΎΠΏ.ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ-ΡΡΡΠ»ΠΊΠΎΠΉ
<Card
image="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
title="ΠΠ°Π½Π΄Π°ΡΠΈΠ½"
subtitle={<a href="/morocco">ΠΠ°ΡΠΎΠΊΠΊΠΎ</a>}
content={<span><b>299Ρ</b><i>5 ΠΎΡΠ·ΡΠ²ΠΎΠ²</i><span>}
/>
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°.
ΠΠ°ΠΊΠ΅ΡΡ ΠΈΠ½ΠΏΡΡΠ°: GitHub, E-commerce, Food, Crypto
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ html-ΡΠ΅Π³ input
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Input */
export type InputProps = Omit<
React.InputHTMLAttributes<HTMLInputElement>,
'onChange'
> & {
/** ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ */
value: string;
/** Callback, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΡΡ
Π² ΠΏΠΎΠ»Π΅ */
onChange: (value: string) => void;
};
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΠΡΠΎΡΡΠΎΠ΅ ΠΏΠΎΠ»Π΅
<Input
value="ΠΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π±ΠΈΡΠΊΠΎΠΈΠ½?"
onChange={(value: string) => console.log(value)}
/>
// ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ ΠΏΠ»Π΅ΠΉΡΡ
ΠΎΠ»Π΄Π΅ΡΠΎΠΌ
<Input
value=""
onChange={(value: string) => console.log(value)}
placeholder="ΠΠ°ΡΠ½ΠΈΡΠ΅ Π½Π°Π±ΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ"
disabled
/>
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΡΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ (Π€ΠΈΠ»ΡΡΡ).
ΠΠ°ΠΊΠ΅ΡΡ ΠΌΡΠ»ΡΡΠΈΠ΄ΡΠΎΠΏΠ΄Π°ΡΠ½Π°: GitHub, E-commerce, Food, Crypto,
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ html-ΡΠ»Π΅ΠΌΠ΅Π½Ρ select
/** ΠΠ°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π² ΡΠΈΠ»ΡΡΡΠ΅ */
type Option = {
/** ΠΠ»ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π½Π° Π±Π΅ΠΊ/ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ */
key: string;
/** ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ */
value: string;
};
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Dropdown */
type MultiDropdownProps = {
/** ΠΠ°ΡΡΠΈΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° */
options: Option[];
/** Π’Π΅ΠΊΡΡΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ, ΠΌΠ°ΡΡΠΈΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ */
value: Option[];
/** Callback, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠ° */
onChange: (value: Option[]) => void;
/** ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π»ΠΈ Π΄ΡΠΎΠΏΠ΄Π°ΡΠ½ */
disabled?: boolean;
/** ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΡ. ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π΄ΡΠΎΠΏΠ΄Π°ΡΠ½Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ */
pluralizeOptions: (value: Option[]) => string;
}
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΠΡΠΎΡΡΠΎΠΉ ΡΠΈΠ»ΡΡΡ
<MultiDropdown
options={[
{ key: 'msk', value: 'ΠΠΎΡΠΊΠ²Π°' },
{ key: 'spb', value: 'Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³' },
{ key: 'ekb', value: 'ΠΠΊΠ°ΡΠ΅ΡΠΈΠ½Π±ΡΡΠ³' }
]}
value={[{ key: 'msk', value: 'ΠΠΎΡΠΊΠ²Π°' }]}
onChange={(selected: Option[]) => console.log('ΠΡΠ±ΡΠ°Π½ΠΎ:', JSON.stringify(selected))}
pluralizeOptions={() => ''}
/>
// ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠ»ΡΡΡ
<MultiDropdown
disabled
options={someOptions}
value={currentValue}
onChange={onChange}
pluralizeOptions={(values: Option[]) => values.length === 0 ? 'ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π³ΠΎΡΠΎΠ΄' : `ΠΡΠ±ΡΠ°Π½ΠΎ: ${values.length}`}
/>
// Π€ΠΈΠ»ΡΡΡ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²
<MultiDropdown
options={someOptions}
value={currentValue}
onChange={onChange}
pluralizeOptions={(values: Option[]) => `ΠΡΠ±ΡΠ°Π½ΠΎ: ${values.length}`}
/>
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π§Π΅ΠΊΠ±ΠΎΠΊΡ.
ΠΠ°ΠΊΠ΅ΡΡ ΡΠ΅ΠΊΠ±ΠΎΠΊΡΠ°: GitHub, E-commerce, Food, Crypto
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ html-ΡΠ΅Π³ input
/** ΠΡΠΎΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ CheckBox */
type CheckBoxProps = Omit<
React.InputHTMLAttributes<HTMLInputElement>,
'onChange'
> & {
/** ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΡΠ΅ΠΊΠ±ΠΎΠΊΡ */
onChange: (value: boolean) => void;
};
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΠΡΠΎΡΡΠΎΠΉ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ
<CheckBox
checked={checked}
onChange={setChecked}
/>
// ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ
<CheckBox
disabled
checked={checked}
onChange={setChecked}
/>