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 = () => {}