相关代码: react-demo-02

创建登录页

框架模板自带的登录模板较为复杂,而且不符合我们的登录需求,所以我们需要自行创建登录页.
创建src/pages/Login/index.tsx

  1. import React from 'react';
  2. // 使用函数组件创建 虽然采用了typescript语法 ,但可以先像 js一样写代码.
  3. const Login = ()=>{
  4. return (
  5. <div>
  6. hellow, login !
  7. </div>
  8. )
  9. }
  10. export default Login;

修改路由文件 config/routes.ts

  1. {
  2. path: '/',
  3. component: '../layouts/BlankLayout',
  4. routes: [
  5. {
  6. path: '/user',
  7. component: '../layouts/UserLayout',
  8. routes: [
  9. {
  10. name: 'login',
  11. path: '/user/login',
  12. //===> 这里使用刚才创建的组件替换默认登录组件. /index.tsx 可以省略不写
  13. component: './Login',
  14. },
  15. ],
  16. },

修改layouts/UserLayout.tsx 组件显示信息

  1. import { GithubOutlined } from '@ant-design/icons';
  2. ...
  3. <div className={styles.container}>
  4. <div className={styles.lang}>
  5. <SelectLang />
  6. </div>
  7. <div className={styles.content}>
  8. <div className={styles.top}>
  9. <div className={styles.header}>
  10. <Link to="/">
  11. <img alt="logo" className={styles.logo} src={logo} />
  12. <span className={styles.title}>乐居商城</span>
  13. </Link>
  14. </div>
  15. <div className={styles.desc}>
  16. /* 国际化配置映射 */
  17. <FormattedMessage id="pages.layouts.userLayout.title" defaultMessage="默认信息" />
  18. </div>
  19. </div>
  20. {children}
  21. </div>
  22. /* 自定义底部
  23. # https://procomponents.ant.design/components/layout/#footer
  24. */
  25. <DefaultFooter
  26. copyright={`${new Date().getFullYear()} 不凡学院`}
  27. links={[
  28. {
  29. key: 'Ant Design Pro',
  30. title: 'Ant Design Pro',
  31. href: 'https://pro.ant.design',
  32. blankTarget: true,
  33. },
  34. {
  35. key: 'github',
  36. title: <GithubOutlined />,
  37. href: 'https://gitee.com/bufanxy/react-learn-demos',
  38. blankTarget: true,
  39. },
  40. {
  41. key: 'Ant Design',
  42. title: 'Ant Design',
  43. href: 'https://ant.design',
  44. blankTarget: true,
  45. },
  46. ]}
  47. />
  48. </div>

访问 http://localhost:8000/user/login
image.png

创建表单

可以参考 ant design 文档,创建表单组件. 修改 src/pages/Login/index.tsx
样式这里采用的是 less ,跟 sass 一样是css预编译器. 通过模块化引入,可以直接在 jsx 中调用. 注意: 在jsx中对属性采用驼峰命名,区别于普通html规范.

  1. import React from 'react';
  2. import { Form, Input, Button } from 'antd';
  3. import styles from './index.less';
  4. const Login = ()=>{
  5. // 提交表单且数据验证成功后回调事件
  6. const onFinish = v=>{
  7. console.log('v',v);
  8. }
  9. // 提交表单且数据验证失败后回调事件
  10. const onFinishFailed = v=>{
  11. console.log('ev',v);
  12. }
  13. return (
  14. <Form
  15. className={styles.main}
  16. labelCol = {{span: 8}}
  17. wrapperCol = {{span: 16}}
  18. onFinish= {onFinish}
  19. onFinishFailed = {onFinishFailed}
  20. >
  21. <Form.Item
  22. label="用户名"
  23. name="username"
  24. rules={[
  25. {required: true ,message: '用户名不能为空!'}
  26. ]}
  27. >
  28. <Input/>
  29. </Form.Item>
  30. <Form.Item
  31. label="密码"
  32. name="password"
  33. rules={[
  34. {required: true, message: '密码不能为空!'}
  35. ]}
  36. >
  37. <Input.Password/>
  38. </Form.Item>
  39. <Form.Item
  40. wrapperCol={
  41. {
  42. offset: 8,
  43. span: 16
  44. }
  45. }
  46. >
  47. <Button type="primary" htmlType="submit">登录</Button>
  48. </Form.Item>
  49. </Form>
  50. )
  51. }
  52. export default Login;
  53. // ./index.less
  54. .main{
  55. width: 400px;
  56. margin: 100px auto;
  57. }

image.png
使用 ant design 我们方便的实现了登录页的布局,如何调用接口? 不要着急,这里和vue项目有比较大的差别.我们需要先了解项目的逻辑分层.