zent
Version:
一套前端设计语言和基于React的实现
147 lines (141 loc) • 3.63 kB
Markdown
order: 1
zh-CN:
title: 基础用法
name: 用户名
nameTip: 用户名用于个人账号登录
nameHelpdesc: 用户名为5-25个字
nameMinLength: 用户名至少 5 个字
nameMaxLength: 用户名最多 25 个字
password: 密码
pwHelpDesc: 密码由英文字母、数字组成
passwordPattern: 只允许英文字母和数字
link: 查看更多
notice: 重要提示:填写后无法修改,请谨慎设置
required: 必填
email: 请输入正确的邮箱
disable: 禁用表单
enable: 解除禁用
initialize: 初始化表单数据
reset: 重置
clear: 清空
en-US:
title: Basic usage
name: User Name
nameTip: User name is used for personal login
nameHelpdesc: User name is 5-25 characters
nameMinLength: User name is at least 5 characters long
nameMaxLength: User name is at most 25 characters long
password: Password
pwHelpDesc: Password consists of letters and numbers
passwordPattern: Only letters and numbers
link: Watch more.
notice: Notice that user name and password cannot be modified after submitting. Please submit carefully.
required: Required
email: Invalid email
disable: Disable
enable: Enable
initialize: Initialize
reset: Reset
clear: Clear
```jsx
import {
FormInputField,
Form,
FormStrategy,
Validators,
Pop,
Icon,
ButtonDirective,
} from 'zent';
function Component() {
const form = Form.useForm(FormStrategy.View);
const [disabled, setDisabled] = React.useState(false);
const [initializing, setInitializing] = React.useState(false);
const initialize = React.useCallback(() => {
setInitializing(true);
setTimeout(() => {
form.initialize({
name: 'zent',
password: 'zenttnez',
email: 'zent@youzan.com',
});
setInitializing(false);
}, 1000);
}, [form]);
return (
<>
<Form layout="vertical" form={form} disabled={disabled}>
<FormInputField
name="name"
label={
<span>
{i18n.name}
<Pop trigger="hover" content="{i18n.nameTip}" centerArrow>
<Icon type="info-circle-o" />
</Pop>:
</span>
}
validators={[
Validators.minLength(5, '{i18n.nameMinLength}'),
Validators.maxLength(25, '{i18n.nameMaxLength}'),
]}
helpDesc="{i18n.nameHelpdesc}"
required="{i18n.required}"
/>
<FormInputField
name="password"
props={{ type: 'password' }}
label="{i18n.password}:"
helpDesc={
<span>
{i18n.pwHelpDesc}
<a href="https://youzan.com" target="_blank">
{i18n.link}
</a>
</span>
}
validateOccasion={
Form.ValidateOccasion.Blur | Form.ValidateOccasion.Change
}
validators={[
Validators.pattern(/^[a-zA-Z0-9]+$/, '{i18n.passwordPattern}'),
]}
notice="{i18n.notice}"
required="{i18n.required}"
/>
<FormInputField
className="demo-form-basic-email"
label="E-Mail:"
name="email"
validators={[
Validators.required('{i18n.required}'),
Validators.email('{i18n.email}'),
]}
/>
<Button htmlType="reset">{i18n.reset}</Button>
<Button onClick={form.model.clear.bind(form.model)}>
{i18n.clear}
</Button>
<Button loading={initializing} onClick={initialize}>
{i18n.initialize}
</Button>
<Button onClick={() => form.model.clearError()}>清空错误信息</Button>
</Form>
<Button
style={{ marginTop: 24 }}
onClick={() => setDisabled(prev => !prev)}
>
{disabled ? '{i18n.enable}' : '{i18n.disable}'}
</Button>
</>
);
}
ReactDOM.render(<Component />, mountNode);
```
<style>
.demo-form-basic-email {
margin-left: 5px;
}
</style>