-
Notifications
You must be signed in to change notification settings - Fork 324
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
12 步 30 分钟,完成用户管理的 CURD 应用 (react+dva+antd) #18
Comments
简直好用到哭,😂 |
这就是我想要的东西~👍👍👍 |
期待下一篇~ |
dispatch(routerRedux.push({ routerRedux 可以直接切换路由? |
|
👍 最近文档更新的越来越易读了 |
期待新作,,, |
现在的项目在用是 dva 0.60,,可以直接升级到0.70吗 |
@linyongping dva-cli@0.6 ? 到 0.7 主要是工具的变动,要换到 roadhog,可以参考 #17 。 |
@gitoneman await 必须在 async 函数里。 |
@sorrycc 谢谢,对await不熟悉 |
请问npm start出现这个错误 `npm start
/Users/feiya200/Documents/user-dashboard/node_modules/roadhog/bin/roadhog.js:9 SyntaxError: Unexpected token [ npm ERR! Darwin 15.6.0 npm ERR! Please include the following file with any support request: |
node 版本要求 6.5 或以上。 |
oops |
请问,我想配置端口怎么设置?因为本地想开多个 dva 项目,但是改不了端口。
但是还有个 8000 端口
|
@sorrycc 好,谢谢 |
报错,npm start之后~~~ |
想问下,为什么打包之后页面不能正常访问了。 |
@TFous 如果是用的 browserHistory,打包后需要放根目录路由才会匹配到。 |
payload的传参不知道到怎么在model里面获取到的。 |
您好,我想问下,我用dva-cli@0.9.2创建项目,没有找到.roadhogrc,是不是新版本移除了这个配置文件呢,那要配置antd组件按需加载去哪配置呢? |
@kwzm .webpackrc "extraBabelPlugins": [
["import", { "libraryName": "antd", "style": true }]
] |
step 4的时候提示了这个 cry dva generate is disabled since we don't have enough time currently. 请问这个是什么意思?谢谢大牛 |
这个如何指定默认的路由跳转,就是npm start后指定跳转其他的路由而不是'/'路由 @sorrycc |
请问如果是离线react、react-dom要怎么引入呢? |
<script src="https://unpkg.com/react@16.0.0/umd/react.production.min.js"></script>
<script>!window.React && document.write("<script src=\"react.production.min.js\">" + "<\/script>")</script>
<script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.production.min.js"></script>
<script>!window.ReactDOM && document.write("<script src=\"react-dom.production.min.js\">" + "<\/script>")</script> |
谢谢 分享!您的分享对我的学习很有帮助! |
path: "models/users" |
@wingsico subscriptions: {
setup({ dispatch, history }) {
return history.listen(({ pathname, search }) => {
const query = queryString.parse(search);
if (pathname === '/users') {
dispatch({ type: 'fetch', payload: query });
}
});
},
}, |
你好··初次使用不太懂··我生成的项目为什么没有.roadhogrc 而是 .webpackrc 呢··这两个打包工具有冲突不能共存吗?求指点· |
~ drl_dva npm start
module.js:549 Error: Cannot find module '../lib/server' npm ERR! A complete log of this run can be found in: 启动项目报Cannot find module '../lib/server' 重新安装node_modules也没有用,求解 @sorrycc |
好高兴的准备npm startBUT ====>>>>>> 报错了!!!还一直解决不了!!! |
膩害,感謝樓主 |
请问当点击按钮时有弹出框,这个怎么完成的,代码怎么没有找到啊 |
npm start之后页面报如下错误,请问为什么? |
今天也遇到这个问题了,解决了吗? |
我也遇到了这个问题,cnpm的锅,改用npm后啥事也没有 |
用npm |
谢谢朋友 |
走到第2步走不下去了,没找到 |
dva 新版,直接在.webpackrc文件中修改就行,注意格式 |
我今天也遇到这个问题了,原来是作者没时间,所以此dva generate功能未开放 |
你没用他指定的版本,新版的是不支持的 |
想问下 state这种刷新页面就重置,假如做一些业务是要在api连接后台 存入数据库 或者用localStorage这种吗? |
本文会一步步引导大家如何创建一个 CURD 应用,包含查询、编辑、删除、创建,以及分页处理,数据 mock,自动处理 loading 状态等,基于 react, dva 和 antd 。
最终效果:
开始之前:
Step 1. 安装 dva-cli 并创建应用
先安装 dva-cli,并确保版本是 0.7.x。
然后创建应用:
$ dva new user-dashboard $ cd user-dashboard
Step 2. 配置 antd 和 babel-plugin-import
babel-plugin-import 用于按需引入 antd 的 JavaScript 和 CSS,这样打包出来的文件不至于太大。
修改
.roadhogrc
,在"extraBabelPlugins"
里加上:Step 3. 配置代理,能通过 RESTFul 的方式访问 http://localhost:8000/api/users
修改
.roadhogrc
,加上"proxy"
配置:然后启动应用:(这个命令一直开着,后面不需要重启)
浏览器会自动开启,并打开 http://localhost:8000 。
访问 http://localhost:8000/api/users ,就能访问到 http://jsonplaceholder.typicode.com/users 的数据。(由于 typicode.com 服务的稳定性,偶尔可能会失败。不过没关系,正好便于我们之后对于出错的处理)
Step 4. 生成 users 路由
用 dva-cli 生成路由:
然后访问 http://localhost:8000/#/users 。
Step 5. 构造 users model 和 service
用 dva-cli 生成 Model :
修改
src/models/users.js
:新增
src/services/users.js
:由于我们需要从 response headers 中获取 total users 数量,所以需要改造下
src/utils/request.js
:切换到浏览器(会自动刷新),应该没任何变化,因为数据虽然好了,但并没有视图与之关联。但是打开 Redux 开发者工具,应该可以看到
users/fetch
和users/save
的 action 以及相关的 state 。Step 6. 添加界面,让用户列表展现出来
用 dva-cli 生成 component:
然后修改生成出来的
src/components/Users/Users.js
和src/components/Users/Users.css
,并在src/routes/Users.js
中引用他。具体参考这个 Commit。需留意两件事:
src/constants.js
改完后,切换到浏览器,应该能看到带分页的用户列表。
Step 7. 添加 layout
添加 layout 布局,使得我们可以在首页和用户列表页之间来回切换。
src/components/MainLayout/MainLayout.js
和 CSS 文件src/routes
文件夹下的文件中引用这个布局参考这个 Commit。
注意:
Step 8. 通过 dva-loading 处理 loading 状态
dva 有一个管理 effects 执行的 hook,并基于此封装了 dva-loading 插件。通过这个插件,我们可以不必一遍遍地写 showLoading 和 hideLoading,当发起请求时,插件会自动设置数据里的 loading 状态为 true 或 false 。然后我们在渲染 components 时绑定并根据这个数据进行渲染。
先安装 dva-loading :
修改
src/index.js
加载插件,在合适的地方加入下面两句:然后在
src/components/Users/Users.js
里绑定 loading 数据:+ loading: state.loading.models.users,
具体参考这个 Commit 。
切换到浏览器,你的用户列表有 loading 了没?
Step 9. 处理分页
只改一个文件
src/components/Users/Users.js
就好。处理分页有两个思路:
我们用的是思路 2 的方式,好处是用户可以直接访问到 page 2 或其他页面。
参考这个 Commit 。
Step 10. 处理用户删除
经过前面的 9 步,应用的整体脉络已经清晰,相信大家已经对整体流程也有了一定了解。
后面的功能调整基本都可以按照以下三步进行:
我们现在开始增加用户删除功能。
src/services/users.js
:src/models/users.js
:src/components/Users/Users.js
,替换deleteHandler
内容:切换到浏览器,删除功能应该已经生效。
Step 11. 处理用户编辑
处理用户编辑和前面的一样,遵循三步走:
先是 service,修改
src/services/users.js
:再是 model,修改
src/models/users.js
:最后是 component,详见 Commit。
需要注意的一点是,我们在这里如何处理 Modal 的 visible 状态,有几种选择:
另外,怎么存也是个问题,可以:
此教程选的方案是 2-2,即存 component state,并且 visible 按 user 存。另外为了使用的简便,封装了一个
UserModal
的组件。完成后,切换到浏览器,应该就能对用户进行编辑了。
Step 12. 处理用户创建
相比用户编辑,用户创建更简单些,因为可以共用
UserModal
组件。和 Step 11 比较类似,就不累述了,详见 Commit 。到这里,我们已经完成了一个完整的 CURD 应用。但仅仅是完成,并不完善,比如:
请期待下一篇。
(完)
The text was updated successfully, but these errors were encountered: