{"id":466,"date":"2026-06-18T14:35:31","date_gmt":"2026-06-18T06:35:31","guid":{"rendered":"https:\/\/mitongxue.cn\/?p=466"},"modified":"2026-06-18T14:35:31","modified_gmt":"2026-06-18T06:35:31","slug":"umi4-%e8%b7%af%e7%94%b1%e5%ae%88%e5%8d%ab","status":"publish","type":"post","link":"https:\/\/mitongxue.cn\/index.php\/2026\/06\/18\/umi4-%e8%b7%af%e7%94%b1%e5%ae%88%e5%8d%ab\/","title":{"rendered":"umi4 \u8def\u7531\u5b88\u536b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u5f00\u542f\u70ed\u66f4\u65b0fastRefresh<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">umi3\u4e2d\u662fhmr\uff1atrue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export default defineConfig({\n  \/\/ routes: &#91;\n  \/\/   { path: \"\/\", component: \"index\" },\n  \/\/   { path: \"\/docs\", component: \"docs\" },\n  \/\/ ],\n  plugins: &#91;\n    '@umijs\/plugins\/dist\/antd',\n    '@umijs\/plugins\/dist\/dva',\n  ],\n  fastRefresh: true,\n  dva: { \n    immer: { enableES5: true }\n  },<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">src\\models<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import $http from 'api';\nexport default {\n    namespace: 'common',\n    state: {},\n    subscriptions: {\n        setup({dispatch, history}){\n            console.log(arguments,'arguments');\n            \/\/app.start\u9636\u6bb5\u6267\u884c\n            dispatch({type: 'queryUserLogin', payload: {history}});\n        }\n    },\n    reducers: {},\n    effects: {\n        *queryUserLogin({payload}, {call, put, select}){\n            const {history, history:{location:{pathname}}} = payload;\n            \/\/console.log(payload,'payload');\n            if(pathname !== '\/users\/login' &amp;&amp;  pathname !== '\/users\/forgetPwd'){\n                \/\/\u9700\u8981\u62e6\u622a\n                if(\n                    !sessionStorage.getItem('userProfile')||\n                    !sessionStorage.getItem('token')||\n                    !sessionStorage.getItem('routeList')\n                ){\n                    history.push('\/users\/login');\n                }else{\n                    \/\/\n                    const res = yield call($http.queryUserLogin);\n                    console.log(res,'queryUserLogin');\n                    if(res.code !==0) return;\n                    \/\/\u767b\u5f55\u6210\u529f\n                    const {data: routeList} = yield call($http.getRouteList);\n                    console.log(routeList,'getRouteList');\n                    sessionStorage.setItem('routeList', JSON.stringify(routeList));\n                }\n            }else{\n                sessionStorage.clear();\n            }\n        }\n    },\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">src\\pages\\users\\model.js<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u6237\u767b\u5f55\u6210\u529f\u8df3\u8f6c\u5230\u6743\u9650\u8def\u7531\u9875<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import $http from 'api';\nimport {message} from 'antd';\nimport { history } from 'umi';\n\nexport default {\n  namespace: 'user',\n  state: {\n    userInfo: sessionStorage.getItem('userProfile') ? JSON.parse(sessionStorage.getItem('userProfile')) : {},\n    token: '',\n    loginType: '',\n  },\n  reducers: {\n    updateUserProfile:(state, {payload})=>({...state, ...payload})\n  },\n  effects: {\n    *login({payload}, {put, call, select}){\n      \/\/console.log(payload,'payload');\n      const {data,msg} = yield call($http.userLogin, payload);\n      if(!data){\n        message.error(msg);\n        return;\n      }\n      \/\/\u83b7\u53d6\u8def\u7531\n      const {data: routeList} = yield call($http.getRouteList);\n      console.log(routeList,'getRouteList');\n\n      sessionStorage.setItem('userProfile', JSON.stringify(data));\n      sessionStorage.setItem('routeList', JSON.stringify(routeList));\n      yield put({\n        type: 'updateUserProfile',\n        payload: {userInfo: data, routeList: routeList},\n      });\n      \/\/\n      console.log(data,msg,\"test\");\n      history.push(routeList&#91;0].route);\n    }\n  },\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f00\u542f\u70ed\u66f4\u65b0fastRefresh umi3\u4e2d\u662fhm..<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,11],"tags":[],"class_list":["post-466","post","type-post","status-publish","format-standard","hentry","category-react-","category-front"],"featured_image_urls":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"author_info":{"info":["\u9648 \u67d0\u4eba"]},"category_info":"<a href=\"https:\/\/mitongxue.cn\/index.php\/category\/front\/react-%e5%89%8d%e7%ab%af\/\" rel=\"category tag\">React<\/a> <a href=\"https:\/\/mitongxue.cn\/index.php\/category\/front\/\" rel=\"category tag\">\u524d\u7aef<\/a>","tag_info":"\u524d\u7aef","comment_count":"0","_links":{"self":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/comments?post=466"}],"version-history":[{"count":1,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/466\/revisions"}],"predecessor-version":[{"id":467,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/466\/revisions\/467"}],"wp:attachment":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/media?parent=466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/categories?post=466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/tags?post=466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}