项目作者: kne-union

项目描述 :
react-form的辅助工具包
高级语言: JavaScript
项目地址: git://github.com/kne-union/react-form-helper.git
创建时间: 2020-11-25T03:09:55Z
项目社区:https://github.com/kne-union/react-form-helper

开源协议:MIT License

下载


react-form-helper

描述

react-form的辅助工具包

安装

  1. npm i --save @kne/react-form-helper

概述

桥接UI组件库的Form输入组件和@kne/react-form

示例(全屏)

示例代码

  • 基本示例
  • 简单的form到input组件的绑定
  • _ReactFormHelper(@kne/current-lib_react-form-helper),antd(antd),_ReactForm(@kne/react-form),remoteLoader(@kne/remote-loader)
  1. const { createWithRemoteLoader } = remoteLoader;
  2. const { hooks, widget, utils } = _ReactFormHelper;
  3. const { default: Form, useSubmit } = _ReactForm;
  4. const { Input: InputField, Button, Flex } = antd;
  5. const { useDecorator } = hooks;
  6. const { EnterSubmit, FormStore, ScrollToError } = widget;
  7. const Input = (props) => {
  8. const render = useDecorator(Object.assign({ placeholder: `请输入${props.label}` }, props));
  9. return render(InputField);
  10. };
  11. const SubmitButton = ({ type = 'primary', realTime, realtime, disabled = false, ...props }) => {
  12. const { isPass, isLoading, ...submitProps } = useSubmit(props);
  13. if (typeof realTime === 'boolean') {
  14. console.error(`warning: realTime参数已废弃,请使用realtime,后续版本可能回删除realTime的支持`);
  15. }
  16. return (<Button type={type} loading={isLoading}
  17. disabled={disabled || (realtime ? !isPass : false)} {...props} {...submitProps} ></Button>);
  18. };
  19. const BaseExample = createWithRemoteLoader({
  20. modules: ['InfoPage', 'Modal@useConfirmModal']
  21. })(({ remoteModules }) => {
  22. const [InfoPage, useConfirmModal] = remoteModules;
  23. const modal = useConfirmModal();
  24. const formInner = <Flex vertical gap="middle">
  25. <Input name="name" label="名称" rule="REQ LEN-0-10" />
  26. <Input name="email" label="邮箱" rule="REQ EMAIL" />
  27. <SubmitButton>提交</SubmitButton>
  28. </Flex>;
  29. return <InfoPage>
  30. <InfoPage.Part title="简单表单">
  31. <Form onSubmit={(data) => {
  32. modal({
  33. type: 'info', message: JSON.stringify(data, null, 2)
  34. });
  35. }}>
  36. {formInner}
  37. </Form>
  38. </InfoPage.Part>
  39. <InfoPage.Part title="自动滚动到错误位置">
  40. <Form onSubmit={(data) => {
  41. modal({
  42. type: 'info', message: JSON.stringify(data, null, 2)
  43. });
  44. }} onError={(errors) => {
  45. modal({
  46. type: 'error',
  47. message: JSON.stringify(errors.map((item) => ({ label: item.label, errMsg: item.errMsg })), null, 2)
  48. });
  49. }}>
  50. <ScrollToError ></ScrollToError>
  51. {formInner}
  52. </Form>
  53. </InfoPage.Part>
  54. <InfoPage.Part title="回车提交表单">
  55. <Form onSubmit={(data) => {
  56. modal({
  57. type: 'info', message: JSON.stringify(data, null, 2)
  58. });
  59. }} onError={(errors) => {
  60. modal({
  61. type: 'error',
  62. message: JSON.stringify(errors.map((item) => ({ label: item.label, errMsg: item.errMsg })), null, 2)
  63. });
  64. }}>
  65. <EnterSubmit>
  66. {formInner}
  67. </EnterSubmit>
  68. </Form>
  69. </InfoPage.Part>
  70. <InfoPage.Part title="表单缓存">
  71. <Form onSubmit={(data) => {
  72. modal({
  73. type: 'info', message: JSON.stringify(data, null, 2)
  74. });
  75. }} onError={(errors) => {
  76. modal({
  77. type: 'error',
  78. message: JSON.stringify(errors.map((item) => ({ label: item.label, errMsg: item.errMsg })), null, 2)
  79. });
  80. }}>
  81. <FormStore cache="test-form-cache" ></FormStore>
  82. <EnterSubmit>
  83. {formInner}
  84. </EnterSubmit>
  85. </Form>
  86. </InfoPage.Part>
  87. </InfoPage>;
  88. });
  89. render(<BaseExample ></BaseExample>);

API