1. import React, { useEffect } from 'react';
    2. import { Button, Modal } from 'antd';
    3. import FormRender, { useForm } from 'form-render';
    4. const delay = ms => new Promise(res => setTimeout(res, ms));
    5. const A = () => 'hello';
    6. const schema = {
    7. type: 'object',
    8. displayType: 'row',
    9. properties: {
    10. inputName: {
    11. bind: 'ttt',
    12. title: '简单输入框',
    13. type: 'string',
    14. format: 'image',
    15. required: true,
    16. },
    17. in: {
    18. title: '测试',
    19. type: 'string',
    20. 'ui:labelWidth': 300,
    21. 'ui:widget': 'A',
    22. },
    23. listName: {
    24. bind: 'a.x',
    25. title: '对象数组',
    26. description: '对象数组嵌套功能',
    27. type: 'array',
    28. items: {
    29. type: 'object',
    30. properties: {
    31. inputName2: {
    32. title: '复杂输入框',
    33. description: '英文或数字组合',
    34. type: 'string',
    35. },
    36. selectName: {
    37. title: '单选',
    38. type: 'string',
    39. enum: ['a', 'b', 'c'],
    40. enumNames: ['早', '中', '晚'],
    41. widget: 'radio',
    42. labelWidth: 200,
    43. },
    44. },
    45. },
    46. },
    47. },
    48. };
    49. const Demo = () => {
    50. const form = useForm();
    51. useEffect(() => {
    52. form.setValues({ ttt: '234', a: { x: [{ inputName2: 'hello' }] } });
    53. }, []);
    54. const onFinish = (formData, errorFields) => {
    55. if (errorFields.length > 0) {
    56. alert('errorFields:' + JSON.stringify(errorFields));
    57. } else {
    58. alert('formData:' + JSON.stringify(formData, null, 2));
    59. }
    60. };
    61. return (
    62. <div>
    63. <FormRender
    64. form={form}
    65. schema={schema}
    66. onFinish={onFinish}
    67. displayType="column"
    68. widgets={{
    69. A,
    70. }}
    71. />
    72. <Button type="primary" onClick={form.submit}>
    73. 提交
    74. </Button>
    75. </div>
    76. );
    77. };
    78. export default Demo;