{"_id":"@ctsj/dvagenerator","_rev":"4-bd47311148ce16721a2d48c09e6e3cf6","name":"@ctsj/dvagenerator","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@ctsj/dvagenerator","version":"1.0.0","description":"dva数据流的一个生成器","main":"lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","buildpackage":"ctbuild buildpackagets","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json","link":"npm lin @ctsj/build"},"repository":{"type":"git","url":"git+https://github.com/playerljc/CTSJ-DvaGenerator.git"},"author":{"name":"playerljc","email":"playerljc@163.com"},"license":"MIT","bugs":{"url":"https://github.com/playerljc/CTSJ-DvaGenerator/issues"},"homepage":"https://github.com/playerljc/CTSJ-DvaGenerator#readme","devDependencies":{"babel-eslint":"^8.1.2","eslint":"^4.14.0","eslint-config-airbnb":"^16.0.0","eslint-plugin-babel":"^4.0.0","eslint-plugin-compat":"^2.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-markdown":"^1.0.0-beta.6","eslint-plugin-react":"^7.0.1","prop-types":"15.5.10","prettier":"^1.19.1","tslint":"^6.0.0","tslint-config-prettier":"^1.18.0","typescript":"^3.8.2"},"gitHead":"246ba939b4ef1d7b6f00237a70ff784844388c75","_id":"@ctsj/dvagenerator@1.0.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-9ThautQ20q9aL7ZaIt6pieLcMiW1Urw+NlQUkCUJ+MiqYjOISg3l6O8E6kDi/jwJQMy7Ex4HMlQNVnJEOV7Vbw==","shasum":"1d59a5c73b4e6ff840933a4e822508fd5bf9a0a9","tarball":"https://registry.npmjs.org/@ctsj/dvagenerator/-/dvagenerator-1.0.0.tgz","fileCount":12,"unpackedSize":42255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehD3yCRA9TVsSAnZWagAAs+AP+wRM0syRAu0xsFHbOUlQ\nM1KmRSL1+fkaf3cNdb9uaHKDDPdhgcDzjWG3Kmb7hJsDArrnpq/xpkxTfxU1\nTit5sB17EGUh03FjW2xw71vuA1haL6VgIZj66ebg9kiNGSW77FBf51HrqSEa\nUmbQOTUYUNWumYl7dBvA3jEmqgPddpbViNgQSfM87i5stP1fNFiIznBIPcKk\nLnwFDlVrTf7LVPnxmNltJ2spZ3J0xCoi9O2EHe/QbYKc0AbAaPjRvk06AUV8\nRN8BFUIbuV0vUDkol85WXkWcZYpS9bFN3QquU7mKR7fyVKSx+ATPeJ8d8E3c\nCoPr1BJtBlF3P3XKcealTURYO/N5B947F6oGo2+IfNSQssgOx5QpADjpLaI1\n5mMc8XjXv9VKLbGkzbEi4rBTSd6eklRmRP4Ak1cGvxLq/coxyKLvKm/icH5+\nUrr1eueaXzy8H0+Ez37XzYjFP5UXvhOKmotd4yWiwovdxPWxqqFg+hWu+rsA\nixDcg9L//97wWK7MspRE9DTGyG2267Ee0WptMWuBUYJh+7g+BYfdcsxy6JmI\nFYZKExGgDOONvMD3xbpxB+vDD8559+ZCz8s0Er1p6zJhFo8bPDtO3v7fLZGi\nun1RrA4gmPPCdgxesGAVgg2F4EKw1QH7yQke1AwQy+Uiy8phq6h5gUyxTGyf\nkHwt\r\n=iUq7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJqo5dt+/SgxlZdE2uMy9nv+oU71OtxhuHU25FkDy/cAIgTHtaW9sufas2ADzraWJY+qBqFPg4THxFyXmLay3aQtk="}]},"maintainers":[{"name":"playerljc","email":"playerljc@163.com"}],"_npmUser":{"name":"playerljc","email":"playerljc@163.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dvagenerator_1.0.0_1585724914126_0.3734463892063842"},"_hasShrinkwrap":false},"1.0.1":{"name":"@ctsj/dvagenerator","version":"1.0.1","description":"dva数据流的一个生成器","main":"lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","buildpackage":"ctbuild buildpackagets","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json","link":"npm link @ctsj/build"},"repository":{"type":"git","url":"git+https://github.com/playerljc/CTSJ-DvaGenerator.git"},"author":{"name":"playerljc","email":"playerljc@163.com"},"license":"MIT","bugs":{"url":"https://github.com/playerljc/CTSJ-DvaGenerator/issues"},"homepage":"https://github.com/playerljc/CTSJ-DvaGenerator#readme","devDependencies":{"@ctsj/build":"^2.0.11","babel-eslint":"^8.1.2","eslint":"^4.14.0","eslint-config-airbnb":"^16.0.0","eslint-plugin-babel":"^4.0.0","eslint-plugin-compat":"^2.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-markdown":"^1.0.0-beta.6","eslint-plugin-react":"^7.0.1","prop-types":"15.5.10","prettier":"^1.19.1","tslint":"^6.0.0","tslint-config-prettier":"^1.18.0","typescript":"^3.8.2"},"gitHead":"dbe4b4bfeb521cedd5453fa912a6ab2484d89e9c","_id":"@ctsj/dvagenerator@1.0.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-0cVJ2kdsJsDuYO5GIVPnaWPHcIJNrRBuqpT6zHpYoyNdIePsBuKlPNKdIulY0abrIYjHAGg55c1I1oH3+UjVsA==","shasum":"b553366701fa149a457beca05eb6565e6ebe82e6","tarball":"https://registry.npmjs.org/@ctsj/dvagenerator/-/dvagenerator-1.0.1.tgz","fileCount":13,"unpackedSize":505174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF9fqCRA9TVsSAnZWagAA1yQP/jDT7upZP+gDzLj3t5Wk\n8opMAG9kb1ixdsP9cOvEOWgHWC8s0mNN/KtlefpV0oFZb0NXhosYTabGpy0t\nuO1X5Olh0xGTpxJhRpflBpe4XRMGQInwvPp4QcT16RrfEkjmBKo2/yAKBdIi\nHDQI2LnjKn856VfVoHyT1YmkWlEOPAZJvlO69IXfasQoczx+GEW8FgF7F+Xs\nRqRtxhoBv4UBvy8kOBgiSNwnfZOTH27p/KPy5wsI4Nbx3BbyHlJyz32MzQaC\npj1hgHV7d6osJZJNgPGtG0vk/WhyRqJx9uxzlNxqVHRoXZ3Mdt1TvMTmLxjG\nNofSuN0pBAZzA5DmmPFlwZIicGCbvvNcZdaxW1Es0I8yba2jfDDQnNxv4uC5\nXEqeAhHfcZPAm1F3LVEE4FT4GA41xitU7WXRK4bRP4yQHDb3+I2VtXv9BB2c\nCsZELs20BoGFBZku3YdPSDo6lQxSrkSXtMliWfZddTUxi+MHMWDfVqAwzzhC\nV0F7tWz7zF9s264/fCXLRs5r5lh3XM2yP4L7TKkh2nVIgkcPdrTEfgUy59/6\nT41f0NIJpSEVLNagYBcvfaw1Vqssci2Dj52DGoyOZqXGKl9wb4d/abHTGOr0\n9HMg+RgK7ZuOEpWZwcI6Mx7rWvfBpoBP4csXNq3V8nGvx3iTiv4gd1A9JcqQ\nK3Rw\r\n=lMaF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYndAV0coMxjc9fUjp7ATlf7tRc6t+l/dBg6M2zjHkRAiEA15yb0reWYZVxpJbKsQ5UwJO2nP9rZQZGrdGcOSw2cdA="}]},"maintainers":[{"name":"playerljc","email":"playerljc@163.com"}],"_npmUser":{"name":"playerljc","email":"playerljc@163.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dvagenerator_1.0.1_1595398121728_0.5436434972081168"},"_hasShrinkwrap":true},"1.0.2":{"name":"@ctsj/dvagenerator","version":"1.0.2","description":"dva数据流的一个生成器","main":"lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","buildpackage":"ctbuild buildpackagets","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json","link":"npm link @ctsj/build"},"repository":{"type":"git","url":"git+https://github.com/playerljc/CTSJ-DvaGenerator.git"},"author":{"name":"playerljc","email":"playerljc@163.com"},"license":"MIT","bugs":{"url":"https://github.com/playerljc/CTSJ-DvaGenerator/issues"},"homepage":"https://github.com/playerljc/CTSJ-DvaGenerator#readme","devDependencies":{"@ctsj/build":"^2.0.11","babel-eslint":"^8.1.2","eslint":"^4.14.0","eslint-config-airbnb":"^16.0.0","eslint-plugin-babel":"^4.0.0","eslint-plugin-compat":"^2.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-markdown":"^1.0.0-beta.6","eslint-plugin-react":"^7.0.1","prop-types":"15.5.10","prettier":"^1.19.1","tslint":"^6.0.0","tslint-config-prettier":"^1.18.0","typescript":"^3.8.2"},"gitHead":"8e0a0e29cb0f8fdcdda1b65234115a35d89705ce","_id":"@ctsj/dvagenerator@1.0.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-2nBmOTkhEWQpBoKjKZaa5UREHBhysYzHssZbsdgH4zjizOEbpTnsRy7KZMLoV5FMatHX4Wxg4PpaNPvME69ekg==","shasum":"863da57251f7df3a91518aceac08e9479ef02498","tarball":"https://registry.npmjs.org/@ctsj/dvagenerator/-/dvagenerator-1.0.2.tgz","fileCount":13,"unpackedSize":505114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGSw5CRA9TVsSAnZWagAAfx0P/i7N1SVWd8CRt06wSGm1\nV3zR4BV0fqgBitwqI8O1kGFlj4lh5AgcoPFuivbfiNDK6pYL07WS62FWzM7b\n3d+lIVkDzuv0Sc3rh1a4a5ob4Z1+F3YnPXID4+a3kDpO6nlQIGqAyD40JETF\nSolXmqgtgRRT7ZE01k8j0o2FdSly6zSZIM+cmiQctFhCP0YgkBtsZQS494bP\nognuQssbySW5qQ+61YpKMlfgiUrqEcLkIU2yquEytdXW9dC+4l4iNIkQ/5By\neGV3y9DrWeNfqRqYlV1DeTMvYD3bdGCK5Y8cWYGuUy9MLZ28SCrMiSORIEp7\nrGE8AiCIb0Pc7Od4CZJ1VIqj6nwKemeqtXUjjtN8I9StKGFMqsvoiVL+ibhn\nhbwUepYxSlfpDqrRJyWsq8HIDO3tc1pIlj5pdsQDlPzCAXxw9aTfkZrKs94R\nzqfvCt7DtQuirZ58JNgBwdyMEpyZsJmEwJXpo3jM71iMM3pm8TcN4VZVZVwK\nwieZIHgVWTMS+22zHhy4y8rzft9JWiVKgekhTn450b7aUg05ifyI3LIj3G7k\nvV3QDXDOB45GvJ8vVdc/2HcuqxfYrs9pCQNOMES7p42pSoSMratLIjHVfUF9\n220NC5m/kEP3MYvVf+AC9ejLvvxYRXuVj5nIH21DON8WWm6Ath99lY1dQlES\nSBB2\r\n=RM5c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLVY5htqcgZJRARTPCGWknit+2geQUemkz/vhdwxDOcAIgLCxzf+oNFNDjvzG2OAJvWYV+x86SwSs4E/Jrq37Y2dI="}]},"maintainers":[{"name":"playerljc","email":"playerljc@163.com"}],"_npmUser":{"name":"playerljc","email":"playerljc@163.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dvagenerator_1.0.2_1595485240840_0.8209528299733444"},"_hasShrinkwrap":true},"1.0.3":{"name":"@ctsj/dvagenerator","version":"1.0.3","description":"dva数据流的一个生成器","main":"lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","buildpackage":"ctbuild buildpackagets","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json","link":"npm link @ctsj/build"},"repository":{"type":"git","url":"git+https://github.com/playerljc/CTSJ-DvaGenerator.git"},"author":{"name":"playerljc","email":"playerljc@163.com"},"license":"MIT","bugs":{"url":"https://github.com/playerljc/CTSJ-DvaGenerator/issues"},"homepage":"https://github.com/playerljc/CTSJ-DvaGenerator#readme","devDependencies":{"@ctsj/build":"^2.0.11","babel-eslint":"^8.1.2","eslint":"^4.14.0","eslint-config-airbnb":"^16.0.0","eslint-plugin-babel":"^4.0.0","eslint-plugin-compat":"^2.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-markdown":"^1.0.0-beta.6","eslint-plugin-react":"^7.0.1","prettier":"^1.19.1","prop-types":"15.5.10","react":"^16.8.6","react-dom":"^16.8.6","tslint":"^6.0.0","tslint-config-prettier":"^1.18.0","typescript":"^3.8.2","umi":"^3.2.0"},"gitHead":"25ed058dc4636fcf154dc689f459e33edb721d1c","_id":"@ctsj/dvagenerator@1.0.3","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hmIaqIwJL7perGqQRkZXaBTdQJhjZkhYav/r0jMwlDePCS7S1vgYtz9Dt386YCVr4xfdCt/7ngL+zxUg5NvGLw==","shasum":"1110f05fe8301094e8a8e2faa13882b53df1f167","tarball":"https://registry.npmjs.org/@ctsj/dvagenerator/-/dvagenerator-1.0.3.tgz","fileCount":12,"unpackedSize":47738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2vp6CRA9TVsSAnZWagAAmAQQAInpW/TamoUoLInBWiMw\n0q2KDIHvy4C7zoqe9ngtuT8ow4m2BnI3G9l9qlI6+K63IPW37yHl/KXD5cfN\nqw2hA0O7s1TAkBme212A4e3yWFKsAOjb/bQW//RRGtwsKFdUTk+7a6+aicSr\nTcvwEZ9UoZswxpY4SAM74L2ZcyMTP+hlcTDaxdwMMbS+LP3nVoZt5wZKC8QA\nU25i4hWuFDJP3sHBy93fZeWYBfXSmERoMpUJUzhMnYEkkdBc/p+zIQ4cO/QV\nKY72sKMqIuQCp2NipBZTalw5DHSSCZmw5x6ihWGoZcm/shiris/bJYlkBypW\nc2UiRJR3tj/6z3CjqLXDug5NNUtBUDeGFmveC/mM19CzSIzrIx5D2+Ddppcl\n6bHo2W7kg9ZV/JoVaBjTlisoK5A6BngXVd2TQnjNebSurP1pvV4yVJWO01S+\nS7aETY5U+66sUHPSNM6N5Imb9fk5rrpAS0DrDdrA+yEG2rMUqfT5/TQr7Anv\ns4FTnJj5CR3h5oc1mVYIU1AdKCMnc0bZnmzYLtg9lBfGXdWK7USiOe74UUhu\nF4cqXMc70SZ+26gVHNFIl76lJUuGM0qAyfCRhPqy6xI0GOQZrbGRGJkgGbU7\nEF6X5O0mrTIh/5NLtVHhemoEr6afC9ysTXMpKEhX5MLJ8/Gjtn4X46RG2klm\n/OJT\r\n=g1NM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYgTMtmZl1jdRogHG5/nVWcRnmeij+8mpPruxxA4yhbAiBlI5DHVF7BHLMVLR0sDLc8MS8PxRV1TFUuLkbdORk2lA=="}]},"_npmUser":{"name":"playerljc","email":"playerljc@163.com"},"directories":{},"maintainers":[{"name":"playerljc","email":"playerljc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dvagenerator_1.0.3_1608186489558_0.07829774790235966"},"_hasShrinkwrap":false}},"time":{"created":"2020-04-01T07:08:33.931Z","1.0.0":"2020-04-01T07:08:34.292Z","modified":"2022-04-05T02:04:44.070Z","1.0.1":"2020-07-22T06:08:41.841Z","1.0.2":"2020-07-23T06:20:40.977Z","1.0.3":"2020-12-17T06:28:09.669Z"},"maintainers":[{"name":"playerljc","email":"playerljc@163.com"}],"description":"dva数据流的一个生成器","homepage":"https://github.com/playerljc/CTSJ-DvaGenerator#readme","repository":{"type":"git","url":"git+https://github.com/playerljc/CTSJ-DvaGenerator.git"},"author":{"name":"playerljc","email":"playerljc@163.com"},"bugs":{"url":"https://github.com/playerljc/CTSJ-DvaGenerator/issues"},"license":"MIT","readme":"# CTSJ-DvaGenerator\r\n\r\n&ensp;&ensp;dva数据流的一个生成器，能通过Service自动生成组件的mapStateToProps、mapDispatchToProps和Model\r\n\r\n# 简介\r\n\r\n&ensp;&ensp;一个简单的例子，用dva编写一个标椎的用户模块，用户模块中是标准的CRUD操作，我们大致会这样去写\r\n\r\n1. 定义UserService，UserService大致会是这样\r\n```js\r\nimport { stringify } from 'qs';\r\nimport request from '@/utils/request';\r\n\r\n// 列表\r\nexport async function fetchtList(params) {\r\n  return request.get('fetchList');\r\n}\r\n\r\n// 详情\r\nexport async function fetchtInfo(id) {\r\n  return request.get('fetchtInfo');\r\n}\r\n\r\n// 添加\r\nexport async function fetchtSave(payload) {\r\n  return request.post('fetchSave');\r\n}\r\n\r\n// 删除\r\nexport async function fetchtDelete(id) {\r\n  return request.delete('fetchtDelete');\r\n}\r\n\r\n// 修改\r\nexport async function fetchtUpdate(payload) {\r\n  return request.put('fetchtUpdate');\r\n}\r\n```\r\n\r\n2. 定义UserModel，UserModel大致会是这样\r\n```js\r\n  import {\r\n    fetchtList,\r\n    fetchtInfo,\r\n    fetchtSave,\r\n    fetchtDelete,\r\n    fetchtUpdate,\r\n  } from '@/services/UserService';\r\n\r\n  export default {\r\n    namespace: 'user',\r\n    state: {\r\n      data: {\r\n        list: [],\r\n        total: 0,\r\n      },\r\n    },\r\n    effects: {\r\n      // 列表\r\n      *fetchList({ payload }, { call, put, select }) {\r\n        const response = yield call(fetchtList, payload);\r\n        if (response.code === 0) {\r\n          yield put({\r\n            type: 'receive',\r\n            payload: response.data,\r\n          });\r\n        }\r\n      },\r\n      // 详情\r\n      *fetchInfo({ payload:{id} }, { call, put, select }) {\r\n        const response = yield call(fetchInfo, id);\r\n        if (response.code === 0) {\r\n          yield put({\r\n            type: 'receive',\r\n            payload: response.data,\r\n          });\r\n        }\r\n      },\r\n      // 添加\r\n      *feachSave({ payload: { success, ...other } }, { call, put }) {\r\n        const response = yield call(fetchtSave, other);\r\n        if (response.code === 0) {\r\n          if (success) {\r\n            success();\r\n          }\r\n          yield put({ type: 'fetchList', payload: {page:0,limit:10} });\r\n        }\r\n      },\r\n      // 修改\r\n      *feachUpdate({ payload: { success, ...other } }, { call, put }) {\r\n        const response = yield call(feachUpdate, other);\r\n        if (response.code === 0) {\r\n          if (success) {\r\n            success();\r\n          }\r\n          yield put({ type: 'fetchList', payload: {page:0,limit:10} });\r\n        }\r\n      },\r\n      // 删除\r\n      *feachDelete({ payload: { success, id } }, { call, put }) {\r\n        const response = yield call(feachDelete, id);\r\n        if (response.code === 0) {\r\n          if (success) {\r\n            success();\r\n          }\r\n          yield put({ type: 'fetchList', payload: {page:0,limit:10} });\r\n        }\r\n      },\r\n    },\r\n    reducers: {\r\n      receive(state, { payload }) {\r\n        return {\r\n          ...state,\r\n          ...payload,\r\n        };\r\n      },\r\n    },\r\n  };\r\n```\r\n\t\t\t\r\n3. 定义UserPage, UserPage大致会是这样 \r\n```js\r\n  import React from 'react';\r\n  import { connect } from 'dva';\r\n\r\n  class User extends React.Component {\r\n    ...\r\n  }\r\n\r\n  const mapStateToProps = ({ user, loading }) => ({\r\n    user,\r\n    loading: loading.global,\r\n  });\r\n\r\n  const mapDispatchToProps = dispatch => ({\r\n    fetchList: payload => dispatch({ type: 'user/fetchList', payload }),\r\n    fetchInfo: payload => dispatch({ type: 'user/fetchInfo', payload }),\r\n    fetchSave: payload => dispatch({ type: 'user/feachSave', payload }),\r\n    fetchDelete: payload => dispatch({ type: 'user/fetchDelete', payload }),\r\n    fetchUpdate: payload => dispatch({ type: 'user/fetchUpdate', payload }),\r\n  });\r\n\r\n  export default connect(mapStateToProps, mapDispatchToProps)(User);\r\n```\r\n\t\t\t\r\n\r\n&ensp;&ensp;我们会发现一个问题，像这样比较常规的CRUD操作，从Service -> Model -> Component的mapDispatchToProps方法的名字都是一一对应的， 而Model中的Effects操作基本都是调用Service中相应的接口，并且注入到数据流当中，而且Service也是按照相应模块编写的比如UserService就是处理User相关的操作， 这样就和Model中的namespace相对应，再则Model中的reducers里面应该只有一个receive的reducer，不应该有多个处理，effects中所有的put(reducer)都应该调用put({type:'receive'})来进行处理 所以我们就可以根据Service自动生成mapDispatchToProps和Model中的effects和reducers，我们只处理标椎模块，如果自动生成的这三部分不能满足需求，可以进行重写覆盖\r\n\r\n# 处理\r\n\r\n1. mapStateToProps \r\n```js\r\n  return {\r\n    [namespace]: state[namespace],\r\n    loading: state.loading.global\r\n  };\r\n```\r\n\t\t\r\n\r\n2. mapDispatchToProps 和Service方法一一对应，例如 `\r\n```js\r\n  mapDispatchToProps[methodName] = params => dispatch(Object.assign({ type }, params));\r\n```\r\n\t\t\r\n\r\n3. Model \r\n```js\r\n  namespace,\r\n  effects: {},\r\n  reducers: {\r\n    receive(state, { payload }) {\r\n      return {\r\n        ...state,\r\n        ...payload\r\n      };\r\n    }\r\n  }\r\n```\r\n\t\t\r\n\r\n4. effects中的方法和Service的方法一一对用，effects中的方法只做三件事\r\n  1. 调用Service中相应接口 \r\n```js\r\n  const response = yield call(Service[key], other);\r\n```\r\n\t\t\t\t\r\n  2. 调用success回调函数 \r\n```js\r\n  const { codeKey, codeSuccessKey, dataKey, messageKey } = Service.default;\r\n  if (response[codeKey] === codeSuccessKey) {\r\n    if (success) {\r\n      success(response[dataKey],response[messageKey]);\r\n    }\r\n    ...\r\n  }\r\n```\r\n\t\t\t\t\r\n  3. 调用receice的reduce \r\n```js\r\n  yield put({\r\n    type: \"receive\",\r\n    payload: { [service对应的方法名]: 接口返回数据 }\r\n  });\r\n```\r\n\t\t\t\t\r\n  4. 完整的操作 \r\n```js\r\n  // 1.调用接口\r\n  const response = yield call(Service[key], other);\r\n  // Service中的默认导出必须有的键\r\n  // codeKey为状态域\r\n  // codeSuccessKey为状态域中成功标识\r\n  // dataKey为数据域\r\n  const { codeKey, codeSuccessKey, dataKey, messageKey } = Service.default;\r\n  if (response[codeKey] === codeSuccessKey) {\r\n    // 如果有success调用success传递data和message\r\n    // 2.调用回调函数\r\n    if (success) {\r\n      success(response[dataKey],response[messageKey]);\r\n    }\r\n    // 向数据流里放入Service的方法名为key,response[dataKey]为值的数据\r\n    // 3.调用数据流\r\n    yield put({\r\n      type: \"receive\",\r\n      payload: { [key]: response[dataKey] }\r\n    });\r\n  }\r\n```\r\n\t\t\t\t\r\n\r\n5. 处理完成之后我们的UserPage的props中会有如下数据 \r\n```js\r\n  {\r\n    user: {\r\n      fetchList:[],\r\n      fetchInfo:{},\r\n      fetchSave:{},\r\n      fetchDelete:{},\r\n      fetchUpdate:{},\r\n    }\r\n  }\r\n```\r\n\t\t\r\n\r\n# 安装\r\n\r\n\r\n```js\r\n  npm install @ctsj/dvagenerator\r\n```\r\n\r\n\r\n# 例子\r\n\r\n1. 定义UserService \r\n```js\r\n  import { stringify } from 'qs';\r\n  import request from '@/utils/request';\r\n\r\n  // 列表\r\n  export async function fetchtList(params) {\r\n    return request.get('fetchList');\r\n  }\r\n\r\n  // 详情\r\n  export async function fetchtInfo(id) {\r\n    return request.get('fetchtInfo');\r\n  }\r\n\r\n  // 添加\r\n  export async function fetchtSave(payload) {\r\n    return request.post('fetchSave');\r\n  }\r\n\r\n  // 删除\r\n  export async function fetchtDelete(id) {\r\n    return request.delete('fetchtDelete');\r\n  }\r\n\r\n  // 修改\r\n  export async function fetchtUpdate(payload) {\r\n    return request.put('fetchtUpdate');\r\n  }\r\n\r\n  // 默认导出与接口先关的参数\r\n  export default {\r\n    // 接口成功失败的状态键\r\n    codeKey: 'code',\r\n    // 接口成功的状态值\r\n    codeSuccessKey: 200,\r\n    // 接口数据的键\r\n    dataKey: 'data',\r\n    // 接口消息键\r\n    messageKey: 'message',\r\n  };\r\n```\r\n\t\t\r\n\r\n2. 定义UserModel \r\n```js\r\n  import ServiceRegister from '@ctsj/dvagenerator';\r\n\r\n  export default Object.assign(ServiceRegister.model('user'), {\r\n    state: {\r\n      fetchList: [],\r\n    },\r\n    subscriptions: {\r\n      setup({ history, dispatch }) {\r\n        console.log('user', 'setup');\r\n      },\r\n    },\r\n  });\r\n```\r\n\t\t\r\n\r\n3. 定义UserPage \r\n```js\r\n  import React from 'react';\r\n  import { connect } from 'dva';\r\n  import ServiceRegister from '@ctsj/dvagenerator';\r\n\r\n  class User extends React.Component {\r\n    ...\r\n  }\r\n\r\n  const mapStateToProps = state =>\r\n    ServiceRegister.mapStateToProps({\r\n      namespace: 'user',\r\n      state,\r\n    });\r\n\r\n  const mapDispatchToProps = dispatch => ServiceRegister.mapDispatchToProps({\r\n    namespaces: ['user'],\r\n    dispatch,\r\n  });\r\n\r\n  export default connect(mapStateToProps, mapDispatchToProps)(User);\r\n```\r\n\t\t\r\n\r\n4. 注册Service(在第一个执行文件执行的所有引用之后注册,umi是src/global.jsx) \r\n```js\r\n  import * as UserService from './service/UserService';\r\n  import ServiceRegister from '@ctsj/dvagenerator';\r\n\r\n  ServiceRegister.initConfig({\r\n    user: UserService,\r\n  });\r\n```\r\n\t\t\r\n\r\n# API\r\n\r\n* initConfig - 服务注册初始化\r\n\r\n* mapStateToProps - 自动生成mapStateToProps\r\n* mapDispatchToProps - 自动生成mapDispatchToProps\r\n* model - 生成Service对应的Model\r\n\r\n# 其他\r\n\r\ndemo目录下附带了一个todolist的demo，用的是umi的dva工程\r\n","readmeFilename":"README.md"}