目前有这样的需求:一个表单里的输入项想做成组件的形式,可以重复利用。
父组件:
let props={
getFieldDecorator:getFieldDecorator,
itemName:'passWords',
FormItem:FormItem
}
<form>
<FormItem label="用户名" {...labelLayout} hasFeedback>
{getFieldDecorator('userName', {
rules: [
{
required: true,
pattern: /^[0-9a-zA-Z]{1,62}$/,
message: '用户名由英文小写字母,数字组成'
}
]
})(<Input size="large" placeholder="用户名"/>)}
</FormItem>
<ItemComponent {...props}/>
</form>
ItemComponent子组件:
class ItemComponent extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
console.log(this.props)
}
render() {
let getFieldDecorator=this.props.getFieldDecorator
let dispatch=this.props.dispatch
let name=this.props.itemName
let FormItem=this.props.FormItem
return (
<FormItem label="测试" {...labelLayout} hasFeedback>
{getFieldDecorator(name, {
rules: [
{
required: true,
message: '密码不能为空'
}
]
})(
<Input size="large" placeholder="passWords"/>
)}
</FormItem>
)
}
}
这样子组件的输入框是不能输入东西的。不知为何,FormItem、函数还有name是通过props传过来的,不可以这样用的么?
FormItem
最好不要经props
传递Form.create()
创建的form
的getFieldDecorator
传递过去,楼主感觉并没有这样传递(建议直接把form
传递给组件)required
可以单独创建一条验证规则改写过的组件如下: