import React from "react"; import styles from "./index.less"; import { Form, Input, Select, Button } from "antd"; const { Option } = Select; class PriceInput extends React.Component { static getDerivedStateFromProps(nextProps) { // Should be a controlled component. if ("value" in nextProps) { return { ...(nextProps.value || {}) }; } return null; } constructor(props) { super(props); const value = props.value || {}; this.state = { number: value.number || 0, currency: value.currency || "rmb" }; } handleNumberChange = e => { const number = parseInt(e.target.value || 0, 10); if (isNaN(number)) { return; } if (!("value" in this.props)) { this.setState({ number }); } this.triggerChange({ number }); }; handleCurrencyChange = currency => { if (!("value" in this.props)) { this.setState({ currency }); } this.triggerChange({ currency }); }; triggerChange = changedValue => { // Should provide an event to pass value to Form. const { onChange } = this.props; if (onChange) { onChange({ ...this.state, ...changedValue }); } }; render() { const { size } = this.props; const { currency, number } = this.state; return ( ); } } class Demo extends React.Component { handleSubmit = e => { e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { console.log("Received values of form: ", values); } }); }; checkPrice = (rule, value, callback) => { if (value.number > 0) { callback(); return; } callback("Price must greater than zero!"); }; render() { const { getFieldDecorator } = this.props.form; return (
{getFieldDecorator("price", { initialValue: { number: 0, currency: "rmb" }, rules: [{ validator: this.checkPrice }] })()}
); } } const WrappedDemo = Form.create({ name: "customized_form_controls" })(Demo); export default () => (
);