1-basicUsage.jsx 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React, { useState, useRef } from 'react';
  2. import { Form, Col, Row, Button, ArrayField, Space } from '@douyinfe/semi-ui';
  3. import { IconMinusCircle, IconPlusCircle } from '@douyinfe/semi-icons';
  4. function BasicArrayFieldDemo() {
  5. const formRef = useRef();
  6. const formInitValues = {
  7. data: [
  8. { name: 'Semi D2C', role: 'Engineer' },
  9. { name: 'Semi C2D', role: 'Designer' },
  10. ]
  11. };
  12. const logValues = () => {
  13. console.log(formRef.current.formApi.getValues().data);
  14. };
  15. return (
  16. <Form ref={formRef} initValues={formInitValues}>
  17. <ArrayField field="data">
  18. {({ add, addWithInitValue, arrayFields }) => (
  19. <React.Fragment>
  20. <Space>
  21. <Button id='add' onClick={add} icon={<IconPlusCircle />} type="primary">Add</Button>
  22. <Button
  23. id='addWithInit'
  24. onClick={() => addWithInitValue({ name: `Semi New-${arrayFields.length + 1}`, role: 'Designer' })}
  25. icon={<IconPlusCircle />}
  26. type="primary">
  27. Add with row initValue
  28. </Button>
  29. </Space>
  30. {
  31. arrayFields.map(({ field, key, remove }, i) => (
  32. <div key={key} style={{ display: 'flex', width: 600 }} id={`data-${i}`} className='line'>
  33. <Space>
  34. <Form.Input
  35. id={`data-${i}-name`}
  36. field={`${field}[name]`}
  37. label={`${field}.name`}
  38. style={{ width: 200 }}
  39. />
  40. <Form.Input
  41. id={`data-${i}-role`}
  42. field={`${field}[role]`}
  43. label={`${field}.role`}
  44. style={{ width: 200 }}
  45. />
  46. </Space>
  47. <Button style={{ margin: "36px 0 0 12px" }} type="danger" icon={<IconMinusCircle/>} onClick={remove}>remove this line</Button>
  48. </div>
  49. ))
  50. }
  51. <Button htmlType='reset'>Reset</Button>
  52. </React.Fragment>
  53. )}
  54. </ArrayField>
  55. <div>
  56. <Button onClick={() => logValues()} id='log'>logValues</Button>
  57. </div>
  58. </Form>
  59. );
  60. }
  61. BasicArrayFieldDemo.storyName = 'ArrayField-Basic Usage';
  62. export default BasicArrayFieldDemo;