рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 3.4.5
рдЦреЛрдЬ рд╢рдмреНрдж:
рдбрд┐рдлреЙрд▓реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкрд░ рдбрд┐рдлреЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╣реИ
рдХреЛрдб
import React from "react";
interface Props {
name: string;
optional: string;
}
const Component = ({ name, optional = "default" }: Props) => (
<p>{name + " " + optional}</p>
);
const Test = () => <Component name="test" />;
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , optional
рдкреНрд░реЛрдк Test
рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ ES2015 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрд░рдВрднреАрдХрд░рдг рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Component
рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:
рдирд┐рдореНрди рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реИ:
рд╕рдВрдкрддреНрддрд┐ 'рд╡реИрдХрд▓реНрдкрд┐рдХ' рдЯрд╛рдЗрдк рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ '{рдирд╛рдо: рд╕реНрдЯреНрд░рд┐рдВрдЧ; } 'рд▓реЗрдХрд┐рди' рдкреНрд░реЙрдкреНрд╕ 'рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ:
рд╕рдВрдкрд░реНрдХ
рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди TSX рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ:
рдЗрд╕ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдиреЗ Props
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
interface Props {
name: string;
optional?: string;
}
рдпрд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рд░рд┐рд▓реАрдЬ рдиреЛрдЯ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ:
export interface Props {
name: string;
}
// ...
function Greet({ name = "world" }: Props) {
return <div>Hello {name.toUpperCase()}!</div>;
}
рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд░реНрде рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░реЙрдкреНрд╕ (рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ) рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдк рдореМрдЬреВрдж рд╣реИ рднрд▓реЗ рд╣реА рд╡рд╣ рд╣рдореЗрд╢рд╛ рдореМрдЬреВрдж рд╣реЛред
рдЙрджрд╛рд╣рд░рдг:
const wrapper = shallow(<Test/>);
// optional is string | undefined instead of string
const optional = wrapper
.find(Component)
.props()
.optional;
рдпрджрд┐ optional
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдерд╛, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ onClick
рдкреНрд░реЛрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рд░реНрдл preventDefault
рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.1 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
export interface Props {
name: string;
}
function Greet(props: Props) {
return <div>Hello {props.name.toUpperCase()}!</div>;
}
Greet.defaultProps = {
name: "world",
} as Partial<Props>; // Good practice, without it you could use a number as default prop and TypeScript wouldn't complainтАж
const component = <Greet />; // no errors
рдХреНрдпрд╛ рдпрд╣ рдмрдЧ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдердорд╛рдХреНрд╖рд░ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдХрд┐ рдЬрд╛рд░реА рдиреЛрдЯреЛрдВ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╡реАрдирддрдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
@tbassetto рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ TS рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
import React from 'react';
interface Props {
myProp: string;
}
const Comp = (props: Props) => {
return (
<div>
{props.myProp.toUpperCase()}
</div>
);
};
Comp.defaultProps = {
} as Pick<Props, 'myProp'>;
const comp = <Comp />;
рджреВрд╕рд░реА рдХрд╖реНрдЯрдкреНрд░рдж рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд░рдирд╛ рд╣реИ: рдпрджрд┐ рдореИрдВ Comp
React.FC<Props>
рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ defaultProps
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ ред
рд╕рдм рд╕рдм рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрд╢рдВрд╕ JSX / React рдХрд╛ рд╕рдорд░реНрдерди рдЕрднреА рдПрдХ рдЕрдЬреАрдм рдирд╣реАрдВ-рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдЖрдБрдЦреЛрдВ рдореЗрдВ - рдореБрдЦреНрдп рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдХреЛрдИ рдареЛрд╕ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 3.4.5 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдиреЛрдЯреНрд╕)ред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдлрд┐рд░ рднреА рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдХрд╛рдо рдореЗрдВ рд▓реЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдБред
рдореИрдВ рей.рей.рей рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣реВрдБ
export interface Props {
shouldTruncateContent: boolean;
}
const Alert: React.FunctionComponent<Props> = ({
children,
shouldTruncateContent = false
}) => {
return (
<S.Content shouldTruncateContent={shouldTruncateContent} size="fill">
{children}
</S.Content>
);
};
Alert.defaultProps = {
shouldTruncateContent: false
} as Pick<Props, 'shouldTruncateContent'>;
export default Alert;
рдХрд┐рд╕реА рдХреЛ рднреА рдХреНрдпреЛрдВ рдпрд╣ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИ
TS2741: Property 'shouldTruncateContent' is missing in type '{ children: string; }' but required in type 'Props'.
рдореИрдВрдиреЗ # 27425 рдФрд░ # 519 рдореЗрдВ рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рднреА рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред
@tomspeak рдпрд╛ рддреЛ рдореЗрд░рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдпрд╛ @Hotell рдХрд╛ рд╡рд░реНрдЬрди рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕рднреА рдХреЛ
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдлрд┐рд░ рднреА рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдХрд╛рдо рдореЗрдВ рд▓реЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдБред
рдореИрдВ рей.рей.рей рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣реВрдБ
export interface Props { shouldTruncateContent: boolean; } const Alert: React.FunctionComponent<Props> = ({ children, shouldTruncateContent = false }) => { return ( <S.Content shouldTruncateContent={shouldTruncateContent} size="fill"> {children} </S.Content> ); }; Alert.defaultProps = { shouldTruncateContent: false } as Pick<Props, 'shouldTruncateContent'>; export default Alert;
рдХрд┐рд╕реА рдХреЛ рднреА рдХреНрдпреЛрдВ рдпрд╣ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИ
TS2741: Property 'shouldTruncateContent' is missing in type '{ children: string; }' but required in type 'Props'.
рдореИрдВрдиреЗ # 27425 рдФрд░ # 519 рдореЗрдВ рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рднреА рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред
рдЖрдкрдХреЛ рдмрд╕ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ TruncateContent: рдмреВрд▓рд┐рдпрди; рд╡реИрдХрд▓реНрдкрд┐рдХ shouldTruncateContent?: boolean;
рдЗрд╕ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдиреЗ
Props
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:interface Props { name: string; optional?: string; }
рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпреЛрдВ рдЧрд┐рд░рд╛ рд╡реЛрдЯ? рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ?
@ralexhassle , рдореИрдВ рдиреАрдЪреЗ рдХреЗ рд╡реЛрдЯреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
рдЖрдк defaultProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдБ рддрдХ рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдЧреБрдгреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ ...
рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╣рд╛рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рд╣реИ (рдЗрд╕рд▓рд┐рдП рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк ?
рд╕рд╛рде рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ TS рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИред рдбрд╛рдЙрдирд╡реЛрдЯреНрд╕ рдЗрд╕рд▓рд┐рдП рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░ рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрд╛ рдирд╣реАрдВ рдерд╛ рдФрд░ 3.0 рд░рд┐рд▓реАрдЬ рдиреЛрдЯреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
@RyanCavanaugh рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рд╣реИ?
рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ?
PS: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ v4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЧреБрдг рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдШрдЯрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
interface Props {
children: ReactNode;
properties?: Record<string, unknown>;
}
const defaultProps: Props = {
children: '',
properties: {
marginTop: 32,
marginLeft: 0,
marginBottom: 8,
marginRight: 0,
},
};
const RadioListLabel: React.FC<Props> = ({
children,
properties = defaultProps.properties,
}) => (
<View
margin={[
properties ? properties.marginTop : 0
properties ? properties.marginLeft : 0
properties ? properties.marginBottom : 0
properties ? properties.marginRight : 0
]}
>
<Text size="m" variant="heading2" lineHeight="body">
{children}
</Text>
</View>
)
@lakhmeranikita рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рдкреНрд░реЛрдк рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╣реИред
рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдпрд╛ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВ рдкрд╛ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдпрд╣ рд╣реИ:
import React from "react";
type DefaultProps = { optionalProp: number };
type Props = {
requiredProp: "some_string" | "other_string";
} & DefaultProps;
export const BaseComponent = (props: Props) => {
const { requiredProp, optionalProp } = props;
return (
<div>
{requiredProp} {optionalProp}
</div>
);
};
BaseComponent.defaultProps = {
optionalProp: 0,
} as Partial<DefaultProps>;
const comp = <BaseComponent requiredProp="some_string" />;
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.1 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: