【发布时间】:2023-04-02 13:55:01
【问题描述】:
我正在使用 React 和 TypeScript 编写表单组件。我将 Formik 用于表单逻辑。我想将<Form /> 组件作为道具传递给特定的表单并渲染它。这是我尝试过的:
import { Formik, FormikProps } from "formik";
import React, { PureComponent, ReactNode } from "react";
export interface Props {
component: ReactNode; // TODO: Change to one of LoginForm or RegisterForm.
handleSubmit(): void;
}
export class Form extends PureComponent<Props> {
renderForm = (formikProps: FormikProps<any>): ReactNode => {
const { component: FormComponent } = this.props;
return <FormComponent {...formikProps} />;
};
render() {
const { handleSubmit } = this.props;
return <Formik render={this.renderForm} />;
}
}
export default Form;
问题是我返回<FormComponent /> 的行抛出错误:
[ts] JSX element type 'FormComponent' does not have any construct or call signatures.
renderForm 必须返回一个 ReactNode,所以我不能将 ReactNode 更改为 ComponentType(后者将解决 JSX 错误)。
如何在 TypeScript 中做到这一点?
编辑 所以我这样做了(感谢estus):
import { Formik, FormikProps } from "formik";
import React, { PureComponent, ReactElement } from "react";
export interface Props {
component: React.ComponentType<any>; // TODO: Change to one of LoginForm or RegisterForm.
handleSubmit(): void;
}
export class Form extends PureComponent<Props> {
renderForm = (formikProps: FormikProps<any>): ReactElement<any> => {
const { component: FormComponent } = this.props;
return <FormComponent {...formikProps} />;
};
render() {
const { handleSubmit } = this.props;
return <Formik render={this.renderForm} />;
}
}
export default Form;
【问题讨论】:
标签: reactjs typescript typescript-typings react-props typescript-types