Ken*_*nir 28 forms typescript antd
我有一个由Form.create()创建的登录表单,但我不能从父组件传递任何道具到这个表单,编译器总是会通知错误
error TS2339: Property 'loading' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Compone
nt<{}, ComponentState>> & Readonly<{ childr...'.
Run Code Online (Sandbox Code Playgroud)
import * as React from 'react';
import { Form } from 'antd';
import { WrappedFormUtils } from 'antd/lib/form/Form';
interface Props {
form: WrappedFormUtils;
loading: boolean;
username?: string;
}
class LoginForm extends React.Component<Props, {}> {
render() {
const { loading } = this.props;
return (<div>form {loading ? 'true' : 'false'}</div>);
}
}
export default Form.create()(LoginForm);
Run Code Online (Sandbox Code Playgroud)
import LoginForm from './components/loginForm';
const loginPage: React.SFC<Props> = (props) => {
return (
<div>
<LoginForm loading={true}/>
^ error here!
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
我的antd版本是2.11.2
最后我找到了解决方案
class LoginForm extends React.Component<Props & {form: WrappedFormUtils}, State> {
render() {
const { loading } = this.props;
return (<div>form {loading ? 'true' : 'false'}</div>);
}
}
export default Form.create<Props>()(LoginForm);
Run Code Online (Sandbox Code Playgroud)
Ama*_*tle 44
导入FormComponentProps
import {FormComponentProps} from 'antd/lib/form/Form';
Run Code Online (Sandbox Code Playgroud)然后有你的组件
interface YourProps {
test: string;
}
class YourComponent extends React.Component<YourProps & FormComponentProps> {
constructor(props: YourProps & FormComponentProps) {
super(props);
...
}
}
Run Code Online (Sandbox Code Playgroud)然后使用Form.create()导出类
export default Form.create<YourProps>()(YourComponent);
Run Code Online (Sandbox Code Playgroud)
Form.create上的泛型参数将结果转换为带有YourProps的React ComponentClass - 没有FormComponentProps,因为这些是通过Form.create包装器组件注入的.
小智 9
我从antd文档中得到了更好的方法
import { Form } from 'antd';
import { FormComponentProps } from 'antd/lib/form';
interface UserFormProps extends FormComponentProps {
age: number;
name: string;
}
class UserForm extends React.Component<UserFormProps, any> {
// ...
}
const App = Form.create<UserFormProps>({
// ...
})(UserForm);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7920 次 |
| 最近记录: |