ant-design フォーム コンポーネントをラップする方法を理解しようとしています。同じオプションを持つ がいくつかSelect
あるので、 を作成したいと思いましたSelectWrapper
(以下のスニペットを参照)。残念ながら、antd のフォームはこれを気に入らないようで、次のエラーが発生します。
createBaseForm.js:98 Uncaught TypeError: 未定義のプロパティ 'onChange' を読み取れません
私がフォーム小道具を通過したにもかかわらず、Select
.
function ReusableCountrySelect({countries, ...props}) {
return (
<Select
{...props}
>
{
countries.map(c => (
<Select.Option
value={c.id}
key={c.id}
>{c.name}</Select.Option>
))
}
</Select>
);
}
完全な例(スプレッドにはbabelが必要です)
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
const mountNode = document.getElementById('root');
import {
Form, Select, Button
} from 'antd';
const FormItem = Form.Item;
const Option = Select.Option;
function ReusableCountrySelect({countries, ...props}) {
return (
<Select
{...props}
>
{
countries.map(c => (
<Select.Option
value={c.id}
key={c.id}
>{c.name}</Select.Option>
))
}
</Select>
);
}
class Demo extends React.Component {
handleSubmit = (e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
}
});
}
render() {
const { getFieldDecorator } = this.props.form;
return (
<Form onSubmit={this.handleSubmit}>
<FormItem
label="Select Country"
hasFeedback
>
{getFieldDecorator('select', {
rules: [
{ required: true, message: 'Please select your country!' },
],
})(
<ReusableCountrySelect
countries={[
{name: 'china', id: 'china'},
{name: 'india', id: 'india'},
{name: 'britain', id: 'britain'}
]}
placeholder="Please select a country"
/>
)}
</FormItem>
<FormItem
wrapperCol={{ span: 12, offset: 6 }}
>
<Button type="primary" htmlType="submit">Submit</Button>
</FormItem>
</Form>
);
}
}
const WrappedDemo = Form.create()(Demo);
ReactDOM.render(<WrappedDemo />, mountNode);
https://github.com/megavac/antd-form-issueのクローンを作成npm start
し、問題を確認します