UNPKG

zent

Version:

一套前端设计语言和基于React的实现

175 lines (165 loc) 4.14 kB
--- order: 14 zh-CN: title: FieldArray addHobby: 添加兴趣爱好 delHobby: 删除该爱好 hobby: 兴趣爱好 hobbyValidation: 请填写兴趣爱好 addMember: 添加成员 delMember: 删除该成员 member: 成员 name: 名字: sex: 性别: nameValidationError: 请填写成员名字 sexValidationError: 请选择性别 male: 男 female: 女 totalNumber: 家庭总人数: totalNumberError: 请填写家庭总人数 submit: 获取表单值 en-US: title: FieldArray addHobby: Add hobby delHobby: Delete hobby hobby: Hobby hobbyValidation: Please enter the hobby. addMember: Add member delMember: Delete member member: Member name: Name: sex: Sex: nameValidationError: Please enter the name of member. sexValidationError: Please select the sex of member. male: male female: female totalNumber: Total number: totalNumberError: Please enter the total number of the family. submit: submit --- ```jsx import { Form, Icon, Pop } from 'zent'; const { Field, FormInputField, FormRadioGroupField, createForm, FormSection, FieldArray } = Form; class Hobbies extends React.Component { render() { const { fields } = this.props; return ( <ul> <Button onClick={() => fields.push()} className="add-btn">{i18n.addHobby}</Button> {fields.map((hobby, index) => { return ( <li key={index}> <div className="hobby-title"> <span>{i18n.hobby}{index + 1}</span> <Pop centerArrow trigger="hover" content="{i18n.delHobby}"> <Icon type="close-circle" onClick={() => fields.shift()} /> </Pop> </div> <FormInputField name={`${hobby}`} type="text" label="{i18n.hobby}:" validations={{ required: true }} validationErrors={{ required: '{i18n.hobbyValidation}' }} /> </li> ); })} </ul> ); } } class Members extends React.Component { render() { const { fields } = this.props; return ( <ul> <Button onClick={() => fields.push({})} className="add-btn">{i18n.addMember}</Button> {fields.map((member, index) => { return ( <li key={index}> <div className="member-title"> <span>{i18n.member}{index + 1}</span> <Pop centerArrow trigger="hover" content="{i18n.delMember}"> <Icon type="close-circle" onClick={() => fields.remove(index)} /> </Pop> </div> <FormInputField name={`${member}.name`} type="text" label="{i18n.name}" required validations={{ required: true }} validationErrors={{ required: '{i18n.nameValidationError}' }} /> <FormRadioGroupField name={`${member}.sex`} label="{i18n.sex}" required validations={{ required(values, value) { return value !== '' } }} validationErrors={{ required: '{i18n.sexValidationError}' }} > <Radio value="1">{i18n.male}</Radio> <Radio value="2">{i18n.female}</Radio> </FormRadioGroupField> <FieldArray name={`${member}.hobbies`} component={Hobbies} /> </li> ); })} </ul> ); } } class FieldForm extends React.Component { submit = (values, zenForm) => { alert(JSON.stringify(values)); } render() { const { handleSubmit } = this.props; return ( <Form horizontal onSubmit={handleSubmit(this.submit)} className="demo-form"> <FormInputField name="number" type="text" label="{i18n.totalNumber}" required validations={{ required: true }} validationErrors={{ required: '{i18n.totalNumberError}' }} /> <FieldArray name="members" component={Members} /> <div className="zent-form__form-actions"> <Button type="primary" htmlType="submit">{i18n.submit}</Button> </div> </Form> ); } }; const WrappedForm = createForm()(FieldForm); ReactDOM.render( <WrappedForm /> , mountNode ) ``` <style> .add-btn { margin-left: 130px; } .demo-form{ .member-title{ margin: 30px 0 20px; } .hobby-title { margin: 10px 0 5px; } .zenticon { margin-left: 10px; } } </style>