# react+ts+npm
**Repository Path**: zhanggj3/react-ts-npm
## Basic Information
- **Project Name**: react+ts+npm
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-03-16
- **Last Updated**: 2021-03-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# react-ts-npm
习题渲染器(可提交答案)
## 安装
yarn
> yarn add react-ts-npm
npm
> npm i react-ts-npm
## 使用
> 关于习题的 mock 可查看:[mock.ts](./example/src/mock.ts)
只展示
```js
/**
* 只渲染
*/
import React from 'react';
import Renderer from 'lapuata-renderer';
const App: React.SFC<{}> = () => (
);
```
可提交答案
```js
/**
* 可提交
*/
import React, { useCallback } from 'react';
import Renderer from 'react-ts-npm';
import { RenderRef, AnswerItemType } from 'react-ts-npm/dist/types';
const App: React.SFC<{}> = () => {
const renderer = React.createRef();
const handleSubmit = useCallback((answers: AnswerItemType[]) => {
console.log('answers:::', answers);
}, []);
return (
)
}
```
## API
| 参数 | 说明 | 类型 |
|----------|------------------------------------|--------------------------------------|
| renderer | 表单 form 的 ref,可用于触发提交表单 | Ref |
| schemas | 表单数据,用于渲染表单 | FormSchema[] |
| onSubmit | 提交表单的回调 | Function(data: FormResultType[]) |
|formLayout| 表单布局,可选 | layoutType |
Input:单行输入框
| 公共字段 | 类型 |
| key | string 字段键值
| type | FormType 表单类型
| label | string 表单标签文本
| optional? | boolean 是否必填
| rules? | any[] 表单校验规则
| dependencies? | namePath[] 表单依赖键值
| readOnly? | boolean 是否只读
| disabled | boolean 是否禁用
| normalize
| colon
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| allowClear? | boolean 是否可清除
| minLength? | number 输入值最少
| maxLength? | number 输入值最多
textarea:多行文本框
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| allowClear? | boolean 是否可清除
| maxLength? | number 输入值最多
| autoSize? | boolean | object 自适应内容高度,可设置为 true | false或对象:{ minRows: 2,maxRows:6 }
| bordered? | boolean 是否有边框
| showCount? | boolean | object 是否展示字数
| countFormatter | (count: number, maxLength?: number) => string 指定字数展示的格式
select:选择器
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| allowClear? | boolean 是否可清除
| options? | FormTypeOption[] 选项
| bordered? | boolean 是否有边框
| mode | multiple | tags 多选/标签
| showSearch | 使单选模式可搜索
radio:单选框
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| optionType? | default | button radio类型
| options? | FormTypeOption[] 选项
| buttonStyle | outline | solid 描边/填色
switch:开关
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| checked? | boolean 指定当前是否选中
| checkedChildren? | ReactNode 选中时的内容
| unCheckedChildren | ReactNode 未选中时的内容
datetime:日期时间
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| allowClear? | boolean 是否可清除
| bordered? | boolean 是否有边框
| disabledDate | (currentDate: moment) => boolean 不可选择的日期
| mode? | time | date | month | year | decade 日期面板的状态
| picker | date | week | month | quarter | year 设置选择器类型
image:图片
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| accept | string 接收的图片类型
| action | string 图片上传的地址
| method | string 上传请求的 method get post
| multiple | bool 是否支持多选
| maxCount | number 上传数量限制
| size | number 单个图片最大 size
| width | string 图片宽度
| height | string 图片高度
file:文件
| 字段 | 类型 |
|------------------------------------|--------------------------------------|
| accept | string 接收的文件类型
| action | string 文件上传的地址
| method | string 上传请求的 method get post
| multiple | bool 是否支持多选
| maxCount | number 上传数量限制
| size | number 单个文件最大 size
表单校验整理
type
1.email 邮箱
2.string 字符串
3.number 数值
4.boolean 布尔
5.url 链接
6.array 数组
7.enum 枚举
{
type: 'email',
message: "",
}
{
required:true,
message:"",
}
正则表达式
{
pattern: /^[1]([3-9])[0-9]{9}$/,
message: "",
}
transform:(value) => Number(value)
whitespace:boolean 仅包含空格则不通过
validateTrigger: onChange / onBlur
自定义
{
validator: (_, value) =>
value ? Promise.resolve() : Promise.reject(new Error('Should accept agreement')),
}
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('The two passwords that you entered do not match!'));
},
}),
问题分析
1.表单级联,表单间的关联-A有,B没有,----------exclude
2.校验规则