{"_id":"@78d6/react-form","_rev":"3-280e136c6777610de1c2b85dd3007ec1","name":"@78d6/react-form","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@78d6/react-form","version":"0.1.0","main":"build/main.js","scripts":{"start":"set PORT=3030 && node scripts/start.js","build":"node scripts/build.js","test":"node scripts/test.js"},"eslintConfig":{"extends":"react-app"},"browserslist":[">0.2%","not dead","not ie <= 11","not op_mini all"],"jest":{"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"resolver":"jest-pnp-resolver","setupFiles":["react-app-polyfill/jsdom"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testURL":"http://localhost","transform":{"^.+\\.(js|jsx|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"]},"babel":{"presets":["react-app"]},"devDependencies":{"@babel/core":"7.1.6","@svgr/webpack":"2.4.1","babel-core":"7.0.0-bridge.0","babel-eslint":"9.0.0","babel-jest":"23.6.0","babel-loader":"8.0.4","babel-plugin-named-asset-import":"^0.3.0","babel-preset-react-app":"^7.0.0","bfj":"6.1.1","case-sensitive-paths-webpack-plugin":"2.1.2","chalk":"2.4.1","css-loader":"1.0.0","dotenv":"6.0.0","dotenv-expand":"4.2.0","eslint":"5.6.0","eslint-config-react-app":"^3.0.6","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","file-loader":"2.0.0","fork-ts-checker-webpack-plugin-alt":"0.4.14","fs-extra":"7.0.0","html-webpack-plugin":"4.0.0-alpha.2","identity-obj-proxy":"3.0.0","jest":"23.6.0","jest-pnp-resolver":"1.0.1","jest-resolve":"23.6.0","mini-css-extract-plugin":"0.4.3","optimize-css-assets-webpack-plugin":"5.0.1","pnp-webpack-plugin":"1.1.0","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","postcss-preset-env":"6.3.1","postcss-safe-parser":"4.0.1","react":"^16.7.0","react-app-polyfill":"^0.2.0","react-auto-height-transition":"^0.1.3","react-dev-utils":"^7.0.1","react-dom":"^16.7.0","resolve":"1.8.1","sass-loader":"7.1.0","style-loader":"0.23.0","terser-webpack-plugin":"1.1.0","url-loader":"1.1.1","webpack":"4.19.1","webpack-dev-server":"3.1.14","webpack-manifest-plugin":"2.0.4","workbox-webpack-plugin":"3.6.3","node-sass":"*"},"description":"基于react的表单设计","repository":{"type":"git","url":"git+https://github.com/LiZ2z/react-form.git"},"keywords":["react","form"],"author":{"name":"LiZ2z"},"license":"MIT","bugs":{"url":"https://github.com/LiZ2z/react-form/issues"},"homepage":"https://github.com/LiZ2z/react-form#readme","gitHead":"5253c363d6db47569adb16243be904ce1e7d32eb","_id":"@78d6/react-form@0.1.0","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-YRQfgPDlu0PMMqENWfhDClEfNzaklNw9+9VyCrx/vt3iHbSCD1aQbzWfnTnadUvse2zZUty6aL1js9UBH/LyhA==","shasum":"e6bb32759904f1e90ec3ecdd11d46cef2e1c7bb2","tarball":"https://registry.npmjs.org/@78d6/react-form/-/react-form-0.1.0.tgz","fileCount":10,"unpackedSize":51746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc1HKCRA9TVsSAnZWagAAhPwP/RnhV7XzBGiOye4bFpsm\nAh0lBw5acMKyaQvs87oL9p0TANLevjFOru6C9uUYbzOhZV6GkNL/h/9efHb2\nEpytLY8K+zBL7UaPAVMxbLZdsQOF3ls5LuO4ihVdsPgl4noZN7dNcmxqm2Ak\nrR387Z+uK/ywHJIVcnSGq3oCaG0deoyT1wyEK/s9K6I2sJ5Ber4r6+ervrQw\nJtsSbC/FsZTXBB8plETPnmcQf6EbRTzce1FVaEZaeWfgZDHLGdgxlpttLdff\nxlQ3hELq4KlpUEt+MpbGqCXeygvS/AZmdAY2IsjcrBbfL2y+iMpDMXvRoSh2\nwXppRuxjO++t0hwkkjinAMI5/uZIlpXlGOkpurpoJ8MXgw47WbZQQhwpN3XT\nKtXwOpB6W8JTMyhW1f4yhLHT4TNTavn5U6btzgtAgnLaWTJdVX+ahZNUf3m0\n1LAzh/jchELkKSMVRscufHcq7a0J6aeDNX3nGw9MKH1kA0LVMB+esjwuGNGm\nbtVjP/ScF0PoBtvDEWuSmx1ARYNEpYcUnv7X27locGliD07coEOGzEcLEp/3\nsCrjYqwnJVLyt2Khdff019E+ZnXestWpA0gvRvEwdT4d0A0iKNwz12qPF/OF\nzU2bTSKqQpKlA6kfzgRkOsb8kT3T8v4HlgYNCkmzpgBBxsaPaxJl281uroD/\ng+3v\r\n=oB79\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBm/3eUh3Fh/h5tMMl6Pj7xxdeT5v23eW05iVYiaH+6rAiEAriyF3DNCkrj+F/NUDomlsko67tF/JZqG8gKi+qBEVDI="}]},"maintainers":[{"name":"liz2z","email":"fitz-i@foxmail.com"}],"_npmUser":{"name":"liz2z","email":"fitz-i@foxmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_0.1.0_1551061449992_0.058865137523795186"},"_hasShrinkwrap":false},"0.1.1":{"name":"@78d6/react-form","version":"0.1.1","main":"build/main.js","scripts":{"start":"set PORT=3030 && node scripts/start.js","build":"node scripts/build.js","test":"node scripts/test.js"},"eslintConfig":{"extends":"react-app"},"browserslist":[">0.2%","not dead","not ie <= 11","not op_mini all"],"jest":{"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"resolver":"jest-pnp-resolver","setupFiles":["react-app-polyfill/jsdom"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testURL":"http://localhost","transform":{"^.+\\.(js|jsx|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"]},"babel":{"presets":["react-app"]},"peerDependencies":{"react":"^16.7.0","react-dom":"^16.7.0"},"devDependencies":{"@babel/core":"7.1.6","@svgr/webpack":"2.4.1","babel-core":"7.0.0-bridge.0","babel-eslint":"9.0.0","babel-jest":"23.6.0","babel-loader":"8.0.4","babel-plugin-named-asset-import":"^0.3.0","babel-preset-react-app":"^7.0.0","bfj":"6.1.1","case-sensitive-paths-webpack-plugin":"2.1.2","chalk":"2.4.1","css-loader":"1.0.0","dotenv":"6.0.0","dotenv-expand":"4.2.0","eslint":"5.6.0","eslint-config-react-app":"^3.0.6","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","file-loader":"2.0.0","fork-ts-checker-webpack-plugin-alt":"0.4.14","fs-extra":"7.0.0","html-webpack-plugin":"4.0.0-alpha.2","identity-obj-proxy":"3.0.0","jest":"23.6.0","jest-pnp-resolver":"1.0.1","jest-resolve":"23.6.0","mini-css-extract-plugin":"0.4.3","node-sass":"*","optimize-css-assets-webpack-plugin":"5.0.1","pnp-webpack-plugin":"1.1.0","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","postcss-preset-env":"6.3.1","postcss-safe-parser":"4.0.1","react-app-polyfill":"^0.2.0","react-auto-height-transition":"^0.1.3","react-dev-utils":"^7.0.1","resolve":"1.8.1","sass-loader":"7.1.0","style-loader":"0.23.0","terser-webpack-plugin":"1.1.0","url-loader":"1.1.1","webpack":"4.19.1","webpack-dev-server":"3.1.14","webpack-manifest-plugin":"2.0.4","workbox-webpack-plugin":"3.6.3","@78d6/react-form":"^0.1.0"},"description":"基于react的表单设计","repository":{"type":"git","url":"git+https://github.com/LiZ2z/react-form.git"},"keywords":["react","form"],"author":{"name":"LiZ2z"},"license":"MIT","bugs":{"url":"https://github.com/LiZ2z/react-form/issues"},"homepage":"https://github.com/LiZ2z/react-form#readme","gitHead":"b5db5baef417bce781bb62bf455df908d9aa0b14","_id":"@78d6/react-form@0.1.1","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-0hMlYTeM/qwKY1Q9zSaPrtYwgVKSGAODPFG08hTKV2jVBw7NfHQOVJGfItHtmJdqEJKSa4azUAlFK/kKiZ2YEw==","shasum":"da96f3d6d07cf9b3de77bd79d64be16804788d34","tarball":"https://registry.npmjs.org/@78d6/react-form/-/react-form-0.1.1.tgz","fileCount":5,"unpackedSize":43876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc2BqCRA9TVsSAnZWagAAfxsP/1BKI0fB+NsfI9UDDaX0\nXWGE5xWLzcNS8CXcm+/FnriNDTFX/U7fpG16zirQSLDEWrCYpWcl9kzMC1Qw\nodWekE0QDCJQ4tBzJrKoru7rgVtlSkDVj/MwVuNA4+RwS8A1YW6nzyZZND+O\n80Kh/IAC3yWc725aGRYR65HfxAcQThXZGYQmt1hk8oXicyxKCPWEGKEl0uFf\nRzojCJwDYchEdsem6s1R2wmI/SbUUUX99X743naBV4+IQQPmi0afRj6nXvES\nm26gid6hJCc+sa1JQuMeO72nW0oCZq7KHjaWYcW2JDw7uvEh5PFhoa30XMov\nZJ6DQ45QwGZWLMgp3MMHgjs4FAB8SBz2iKp5OeQddt/upInZ7tXatNeptyiX\nFXeg0TDJZFZFNd0/DiJaBKIQL9QEOvKkxfd0FynH/iCUZu1jesBLAkxbUb8C\n7K4ZujcUQG63aOkpda4cNP8bTHvUVF0skTEaMMDm4EMWqWRYKHlx+Pda2UFK\nect0Xle60eU6A0sUN1sa6UWCfjfTo3uzhsH0XhajSwGfvJ2JXJ/Pn64/gz42\nJRcb3w0N7NrBn9xSGh/QErn7X0isR/zU/yMTP5UIEfbYw1Do0ltrjk3yiJB3\nECDk6cDunObUFUBYwhBcen4hcIWlUseKrDrY0CSUTqagSrb5OJE3Emrx+3KF\n8Z6I\r\n=rXdw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbS1MvRCy9Mp5anMZZsGxxcUh2/Eb9Nv3Wxm0cFxNWWAIhAOVHpUCDWSY/d+dGHtV9SiJtbKwH263hZCgOxvjDJHAm"}]},"maintainers":[{"name":"liz2z","email":"fitz-i@foxmail.com"}],"_npmUser":{"name":"liz2z","email":"fitz-i@foxmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_0.1.1_1551065193395_0.936481079240596"},"_hasShrinkwrap":false},"0.1.2":{"name":"@78d6/react-form","version":"0.1.2","main":"build/main.js","scripts":{"start":"set PORT=3030 && node scripts/start.js","build":"node scripts/build.js","test":"node scripts/test.js"},"eslintConfig":{"extends":"react-app"},"browserslist":[">0.2%","not dead","not ie <= 11","not op_mini all"],"jest":{"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"resolver":"jest-pnp-resolver","setupFiles":["react-app-polyfill/jsdom"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testURL":"http://localhost","transform":{"^.+\\.(js|jsx|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"]},"babel":{"presets":["react-app"]},"peerDependencies":{"react":"^16.7.0","react-dom":"^16.7.0"},"devDependencies":{"@78d6/react-form":"^0.1.0","@babel/core":"7.1.6","@svgr/webpack":"2.4.1","babel-core":"7.0.0-bridge.0","babel-eslint":"9.0.0","babel-jest":"23.6.0","babel-loader":"8.0.4","babel-plugin-named-asset-import":"^0.3.0","babel-preset-react-app":"^7.0.0","bfj":"6.1.1","case-sensitive-paths-webpack-plugin":"2.1.2","chalk":"2.4.1","css-loader":"1.0.0","dotenv":"6.0.0","dotenv-expand":"4.2.0","eslint":"5.6.0","eslint-config-react-app":"^3.0.6","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","file-loader":"2.0.0","fork-ts-checker-webpack-plugin-alt":"0.4.14","fs-extra":"7.0.0","html-webpack-plugin":"4.0.0-alpha.2","identity-obj-proxy":"3.0.0","jest":"23.6.0","jest-pnp-resolver":"1.0.1","jest-resolve":"23.6.0","mini-css-extract-plugin":"0.4.3","node-sass":"*","optimize-css-assets-webpack-plugin":"5.0.1","pnp-webpack-plugin":"1.1.0","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","postcss-preset-env":"6.3.1","postcss-safe-parser":"4.0.1","react-app-polyfill":"^0.2.0","react-auto-height-transition":"^0.1.3","react-dev-utils":"^7.0.1","resolve":"1.8.1","sass-loader":"7.1.0","style-loader":"0.23.0","terser-webpack-plugin":"1.1.0","url-loader":"1.1.1","webpack":"4.19.1","webpack-dev-server":"3.1.14","webpack-manifest-plugin":"2.0.4","workbox-webpack-plugin":"3.6.3"},"description":"基于react的表单设计","repository":{"type":"git","url":"git+https://github.com/LiZ2z/react-form.git"},"keywords":["react","form"],"author":{"name":"LiZ2z"},"license":"MIT","bugs":{"url":"https://github.com/LiZ2z/react-form/issues"},"homepage":"https://github.com/LiZ2z/react-form#readme","dependencies":{"react":"^16.8.3","react-dom":"^16.8.3"},"gitHead":"779233d6651c16fbad550e369274f9276b0fc0df","_id":"@78d6/react-form@0.1.2","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-wHi5vJWNPCQFCVees8Xv8joemit1RJAfFiJz0LFSKdAlRYq/RO4Nf7jGV20b6vis83rPpe0qQOXLaIVtiIeZ/A==","shasum":"672c86e2df663a5ce578dd0dd3f5e031e5f74f14","tarball":"https://registry.npmjs.org/@78d6/react-form/-/react-form-0.1.2.tgz","fileCount":5,"unpackedSize":50429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc5l3CRA9TVsSAnZWagAAM8MP/1eN4acwZm6evnUUYaRH\nW1SifRAAcYrgG3n1oVs7G+chuQNHpW5dWxbrs6KGvWj7nWzL9w/0mcveZxjD\nCwNp7ZK18B7Flktwjku6E3WxV0p6oO55vuqBfDTTp1sJYAExKz0KTx38xA9U\ngA2K9JfA24bNbnplwG/c4WBn6YZAdfmJLjFlUxV30gFA2YJjy+kDDelYrE9W\n2ot20RaZ7jUPVrgYvie8f01NrJvMkBPrFT9J5/iIingSOKay/J3HPVCmg5VO\nz6mrbcNck4m/RirbDBF751COESrIeFSpplOgwZyWhIgtJG7HpIsG5dgqggHW\nIvCkBbia+lRGpPEtWI9A4uR65RKgiZ8GlYzaHLSj9qGpNKuYhpCQyEJpM6xK\nhU43l8gQ3BSffbFoEqLgxW5rZ5ZjzOVSScB26QNzUuHXSDVBvpW/P9qR7Lx+\nbkbatJy8qbHe7EXO8/77FIIjQLrUQw6IscWmfvgJmp0fu4HDXTL2ZuBT0rVE\nUnp+iOqDLFEzUPXeMSG4FoiYtvJ4TgHFK55VUblgWJ/DfEdFRp5uPU7nawih\nI+2zPL9jFeWr9M6wy/w6fM9UlGxoZxVkGzLDevVx25LEvOPvQyuvwjdpkn5N\n7g0Sg7U4wPOIx53qjBZdv7UpcKPs8lZRnc7BqdMiSj4s0yCoMmddTtcYmfxE\nzNBj\r\n=BWfC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbQxEC7GhZlkECUjMgmuyGmdab/9pZxWdUY1D+XSmgVgIhAMN9DoEH11SjnyxqYNxRA+FkuTjUf2nuHAiZL+k5fhaE"}]},"maintainers":[{"name":"liz2z","email":"fitz-i@foxmail.com"}],"_npmUser":{"name":"liz2z","email":"fitz-i@foxmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_0.1.2_1551079798694_0.38728580919943023"},"_hasShrinkwrap":false}},"time":{"created":"2019-02-25T02:24:09.808Z","0.1.0":"2019-02-25T02:24:10.167Z","modified":"2022-04-04T10:49:10.258Z","0.1.1":"2019-02-25T03:26:33.534Z","0.1.2":"2019-02-25T07:29:58.838Z"},"maintainers":[{"name":"liz2z","email":"fitz-i@foxmail.com"}],"description":"基于react的表单设计","homepage":"https://github.com/LiZ2z/react-form#readme","keywords":["react","form"],"repository":{"type":"git","url":"git+https://github.com/LiZ2z/react-form.git"},"author":{"name":"LiZ2z"},"bugs":{"url":"https://github.com/LiZ2z/react-form/issues"},"license":"MIT","readme":"# react-form-design\r\n\r\n#### 基于react的表单设计\r\n\r\n### 安装及使用\r\n`npm install @78d6/react-form`\r\n\r\n`import Form from '@78d6/react-form'`\r\n\r\n### 示例：\r\n\r\n### 一、普通用法\r\n\r\n```jsx\r\n\r\nclass Normal extends Component {\r\n    constructor(props) {\r\n        super(props)\r\n        this.form = React.createRef()\r\n    }\r\n    submit() {\r\n        // 调用form.submit方法后，form会调用每个表单项的validator方法\r\n        // 当所有验证通过，则会调用回调函数\r\n        this.form.current.submit(data => {\r\n            ajax.post(url, data)\r\n        })\r\n    }\r\n    render() {\r\n        return (\r\n            <div>\r\n                <h1>普通示例：</h1>\r\n                <div>\r\n                    <button type='button' onClick={this.submit.bind(this)}>submit</button>\r\n                </div>\r\n                <Form \r\n                    onChange={v => console.log(v)} \r\n                    ref={this.form} // 获取form实例的引用以调用form.submit方法\r\n                >\r\n                    <div>\r\n                        <span>input one</span>\r\n                        <Form.Item\r\n                            name='one' // 表单 name 值\r\n                            value='' // 设置默认值 或 由父组件更新表单内的值\r\n                            filter={v=>typeof v==='number'? v : ''} // 对用户输入值进行过滤\r\n                            validator={v => parseInt(v) > 4} // 对表单value进行验证\r\n                            /* 表单功能项 */\r\n                            dependence={'two'} // 此表单项依赖的其他表单项的name值\r\n                            onDepChange={(n, v) => v + 2} // 当依赖的表单项改变时触发此函数\r\n\r\n                            oneOf={['tow']} // 当指定了oneOf，在表单提交时，只要其中一个表单项验证通过后，就算成功\r\n\r\n                        >\r\n                            {\r\n                                // 通过render props 来渲染 表单项\r\n                                // ~~~~~~~~~~~~~~~~~~~~~~~~~\r\n                                // @param {*} value \r\n                                // @param {fn} onChange\r\n                                // @param {fn} doValidate 触发验证，一般在失去焦点时进行\r\n                                // @param {fn} clearState 清除验证的提示，一般在获取焦点时\r\n                                // result {*} validator 验证函数的返回值，可以通过返回 类似 {text: '验证不通过'， color: 'red'}\r\n                                //                      来渲染 提示信息\r\n                                (value, { onChange, doValidate, clearState }, result) => {\r\n                                    return (\r\n                                        <React.Fragment>\r\n                                            <input\r\n                                                value={value}\r\n                                                onChange={e => onChange(e.target.value)}\r\n                                                data-test={String(result)}\r\n                                                onBlur={doValidate}\r\n                                                onFocus={clearState}\r\n                                            />\r\n                                            <span>{String(result)}</span>\r\n                                        </React.Fragment>\r\n                                    )\r\n                                }\r\n                            }\r\n                        </Form.Item>\r\n                    </div>\r\n                    <div>\r\n                        <span>input two</span>\r\n                        <Form.Item\r\n                            name='two'\r\n                            value=\"\"\r\n                        >\r\n                            {\r\n                                (value, { onChange }) => {\r\n                                    return <input value={value} onChange={e => onChange(e.target.value)} />\r\n                                }\r\n                            }\r\n                        </Form.Item>\r\n                    </div>\r\n                </Form>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n```\r\n\r\n\r\n### 二、究极用法\r\n\r\n```jsx\r\nimport React from 'react'\r\nimport {Input, Cell, Icon} from 'ui库'\r\nimport Form from '@78d6/react-cli'\r\n\r\nconst formPlugins = {\r\n  'input': (options) => {\r\n    return (value, {onChange, doValidate, clearState}, obj) => {\r\n      return (\r\n        <React.Fragment>\r\n          <Input {...options.props} onChange={onChange} onBlur={doValidate} onFocus={clearState} value={value} />\r\n          {\r\n            obj && (\r\n              <span className={'_input-tip ' + ('_'+obj.type)}>\r\n                <Icon type={'error'} />\r\n                {obj.text}\r\n              </span>\r\n            )\r\n          }\r\n        </React.Fragment>\r\n      )\r\n    }\r\n  },\r\n  ...others\r\n}\r\n\r\nclass FormPlugin extends React.PureComponent {\r\n  render() {\r\n    const props = this.props\r\n    const value = props.value\r\n    return (\r\n      <Form onChange={props.onChange} output={props.output} ref={props.formRef}>\r\n        <div className={'plugin-form'}>\r\n          {\r\n            props.list.map(item => (\r\n              <Cell key={item.name}\r\n                    title={item.label}\r\n                    value={\r\n                      <Form.Item\r\n                        name={item.name}\r\n                        dependence={item.dependence}\r\n                        onDepChange={item.onDepChange}\r\n                        value={value[item.name]}\r\n                        validator={item.validator}\r\n                      >\r\n                        {formPlugins[item.type](item)}\r\n                      </Form.Item>\r\n                    }/>\r\n            ))\r\n          }\r\n        </div>\r\n      </Form>\r\n    )\r\n  }\r\n}\r\n\r\nexport default FormPlugin\r\n```\r\n这样我们在使用的时候，只需要构造出下面这种数据，然后将其传递给上面的组件就可以\r\n```javascript\r\nconst formList = [\r\n    {\r\n        // 这里的属性将传递给 Form.Item\r\n        type: 'input',\r\n        name: 'girlfriend',\r\n        filter: v=> v, \r\n        dependence: [], // ...\r\n        oneOf: [], // ...\r\n        validator: (v)=>{\r\n            if(typeof v !== 'boolean' && !v) {\r\n                return {\r\n                    text: '此项必填'\r\n                }\r\n            }\r\n            if(v){\r\n                return {\r\n                    text: '单身狗不给使用',\r\n                    type: 'error'\r\n                }\r\n            } else {\r\n                return {\r\n                    text: '通过',\r\n                    type: 'success'\r\n                }\r\n            }\r\n        },\r\n        // validator: (v)=>{\r\n        //     if(typeof v !== 'boolean' && !v) {\r\n        //         message.toast('此项必填')\r\n        //         return false\r\n        //     }\r\n        //     if(v){\r\n        //         message.toast('单身狗不给使用')\r\n        //         return false\r\n        //     } else {\r\n        //         message.toast('通过')\r\n        //         return true\r\n        //     }\r\n        // },\r\n\r\n        // 这里的属性将直接传递给表单组件\r\n        props: {\r\n            placeholder: '请。。。。'\r\n        }\r\n    }\r\n]\r\n```\r\n\r\n\r\n### API\r\n\r\n#### Form\r\n\r\n|prop|说明|类型|默认值|\r\n|---|---|---|---|\r\n|`onChange`|每个表单项的值改变时都会触发Form的onChange事件。第一个参数是整个表单的值（以对象格式保存）；第二个，第三个参数分别是当前触发更改的表单项的name和value|`Function({name:value,...}, name, value)`|-|\r\n\r\n##### Form实例的方法：\r\n*通过ref获取Form实例*\r\n\r\n- `ref.submit(callback)` 调用此方法后，form会调用每个表单项的`validator`方法当所有验证通过，则会调用回调函数\r\n  \r\n**TODO:**\r\n- `ref.clearAllState` 调用此方法后清除所有表单验证的状态\r\n\r\n\r\n\r\n#### Form.Item\r\n\r\n|prop|说明|类型|默认值|\r\n|---|---|---|---|\r\n|`name`|表单 name 值|`String`|-|\r\n|`value`|默认值 或 由父组件更新表单内的值|`*`|-|\r\n|`filter`|对用户输入值进行过滤|`Function(oldV){return newV}`|-|\r\n|`validator`|对用户输入值进行验证|`Function(value, formValue){...}`|`()=>true`|\r\n|`dependence`|此表单项依赖的其他表单项的name值|`String`or`Array`|-|\r\n|`onDepChange`|当依赖的表单项改变时触发此函数|`Function(depName,depValue){return value}`|-|\r\n|`oneOf`|当指定了oneOf，在表单提交时，只要其中一个表单项验证通过后，就算成功|`Array`|-|\r\n\r\n","readmeFilename":"README.md"}