reactjs - React Typescript ფუნქციონალური კომპონენტი ფუნქციის დანიშვნის გარეშე
მე შემხვდა ეს კოდი FormWithRedirect განსაზღვრელად როგორც FC(FunctionComponent):
declare const FormWithRedirect: FC<FormWithRedirectProps>;
export declare type FormWithRedirectProps = FormWithRedirectOwnProps & Omit<FormProps, 'onSubmit' | 'active'>;
export interface FormWithRedirectOwnProps {
defaultValue?: any;
record?: Record;
redirect?: RedirectionSideEffect;
render: (props: Omit<FormViewProps, 'render' | 'setRedirect'>) => React.ReactElement<any, any>;
...
}
და აქ არის როგორ გამოიყენება:
const SimpleForm: FC<SimpleFormProps> = (props) => (
<FormWithRedirect {...props} render={(formProps) => <SimpleFormView {...formProps} />} />
);
თვით FC-ის განსაზღვრიდან გამომდინარე ქვემოთ:
type FC<P = {}> = FunctionComponent<P>;
interface FunctionComponent<P = {}> {
(props: PropsWithChildren<P>, context?: any): ReactElement | null;
propTypes?: WeakValidationMap<P>;
contextTypes?: ValidationMap<any>;
defaultProps?: Partial<P>;
displayName?: string;
}
ვვარაუდობ, რომ FormWithRedirect-ს გამოყენებამდე უნდა განხორციელდეს მისთვის მინიჭება (რაღაც მსგავსი FormWithRedirect=(props) => {....}), თუმცა ზემოთ მოცემულ კოდში არც მინიჭებაა და არც ფუნქციაა მინიჭებული. როგორ მუშაობს ეს?
პასუხი #1
https://stackoverflow.com/a/59552002/2312051
ძირითადი
'declare' გამოიყენება კომპილატორისათვის იმის გასაგებად, რომ 'ეს რამ (ჩვეულებრივ ვარიაბლი) უკვე არსებობს, და შესაბამისად, შეიძლება სხვა კოდმა მისი გამოყენება მოახდინოს, ასევე ამ განცხადების JavaScript-ში შემუშავება საჭირო არ არის'
SO-ს მითითებისას
დოკუმენტებში:
დეკლარაცია.
გამოიყენეთ declare var ცვლილებულების გამოსაცხადებლად. თუ ცვლილებული მხოლოდ წასაკითხია, შეგიძლიათ გამოიყენოთ declare const. ასევე შეგიძლიათ გამოიყენოთ declare let, თუ ცვლილებული ბლოკის მასშტაბშია.
/** The number of widgets present */
declare var foo: number;
FormWithRedirect არის დეკლარაცია, რომელიც აღწერს, როგორ იქნება const გამოყენებული/დაბრუნებული. ანუ ეს იქნება ფუნქციური კომპონენტი FormWithRedirectProps-ით
ეს მოკლე გზაა კონკრეტული ცვლადის მიერ აღიარებული/დაბრუნებული ინტერფეისისა და ტიპების განსაზღვრისთვის.
როგორც მე ვხედავ, declare-ის გამოყენება კომპილატორისთვის არის სარტყელური გზა 1. არ შექმნას კონკრეტულად FormWithRedirect-ის მაგალითის განსაზღვრა და 2. მოგვიანებით მას წარსადგენად (პირველი const-ის შესრულებისათვის) FormWithRedirect ტიპის განსაზღვრად
მაგალითი:
კონსტანტის ასოცირება გამოტანილი მოვალეობის ნაცვლად
const FormWithRedirect: FC<FormWithRedirectProps> = () => {
...whatever
}
რაღაც ადგილი, (განაცხადეთ, რომ FormWithRedirect ინიარს და უნდა არსებობს სადღაც)
declare const FormWithRedirect: FC<RedirectWithProps>
ელოდეთ იმპლემენტაციას სხვაგან
const FormWithRedirect = () => {}
