React18+Redux+antd 项目实战 JS

React18+Redux+antd 项目实战 js

Ant Design插件官网
Axios官网 (可配置请求拦截器和响应拦截器)
JavaScript官网
Echarts官网

一、项目前期准备

1.创建新项目 hotel-manager

bash 复制代码
npx create-react-app hotel-manager

2.安装依赖

bash 复制代码
//安装路由
npm i react-router-dom

npm i aixos
//安装组件库
npm i antd

npm i sass

3.删除没必要的文件,最后新建文件夹成这样

4.修改里面的文件代码

(1)修改index.css

bash 复制代码
* {
  margin: 0;
  padding: 0;
  list-style: none;
  text-decoration: none;
  outline: none;
}

body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
    sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

(2)修改App.js

bash 复制代码
import { BrowserRouter, Route, Routes } from 'react-router-dom';
// 导入页面组件
import Layout from './views/Layout/Layout';
import Login from './views/Login/Login';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path='/' element={<Login />} />
        <Route path='/Layout' element={<Layout />} />
      </Routes>
    </BrowserRouter>
  );
}

export default App;

(3)清空App.css

(4)修改index.js

bash 复制代码
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import 'antd/dist/reset.css'
import App from './App';


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);

二、开始项目编写

(1)新建Layout.js

bash 复制代码
import React, { useState } from 'react';
import {
  MenuFoldOutlined,
  MenuUnfoldOutlined,
  UploadOutlined,
  UserOutlined,
  VideoCameraOutlined,
} from '@ant-design/icons';
import { Button, Layout, Menu, theme } from 'antd';
import './Layout.scss'


const { Header, Sider, Content } = Layout;
export default function () {
  const [collapsed, setCollapsed] = useState(false);
  const {
    token: { colorBgContainer, borderRadiusLG },
  } = theme.useToken();
  return (
    <Layout className='layout'>
      <Sider trigger={null} collapsible collapsed={collapsed}>
        <div className="demo-logo-vertical" />
        <Menu
          theme="dark"
          mode="inline"
          defaultSelectedKeys={['1']}
          items={[
            {
              key: '1',
              icon: <UserOutlined />,
              label: 'nav 1',
            },
            {
              key: '2',
              icon: <VideoCameraOutlined />,
              label: 'nav 2',
            },
            {
              key: '3',
              icon: <UploadOutlined />,
              label: 'nav 3',
            },
          ]}
        />
      </Sider>
      <Layout>
        <Header
          style={{
            padding: 0,
            background: colorBgContainer,
          }}
        >
          <Button
            type="text"
            icon={collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}
            onClick={() => setCollapsed(!collapsed)}
            style={{
              fontSize: '16px',
              width: 64,
              height: 64,
            }}
          />
        </Header>
        <Content
          style={{
            margin: '24px 16px',
            padding: 24,
            minHeight: 240,
            background: colorBgContainer,
            borderRadius: borderRadiusLG,
          }}
        >
          Content
        </Content>
      </Layout>
    </Layout>
  )
}

(2)新建Layout.scss

bash 复制代码
.layout {
  width: 100vw;
  height: 100vh;
}

(3)新建Login.js

bash 复制代码
import React, { useState } from "react";
import './Login.scss'
import { Button, Form, Input, message } from 'antd';
import MyNotification from "../../components/MyNotification/MyNotification";
import { useNavigate } from "react-router-dom";

export default function Login() {
  //导航
  let navigate = useNavigate()
  // 通知框状态消息提示
  let [notiMsg, setNotiMsg] = useState({ type: '', description: '' })
  // 表单成功提交方法
  const onFinish = (values) => {
    console.log('Success:', values);
    setNotiMsg({ type: 'success', description: message })
    //跳转到首页
    navigate('/layout')
  };
  let [form] = Form.useForm()
  const onReset = () => {
    form.resetFields();
  };
  return (
    <div className="login">
      <div className="content">
        <h2>后台管理系统</h2>
        <Form
          name="basic"
          form={form}
          labelCol={{
            span: 4,
          }}
          wrapperCol={{
            span: 18,
          }}
          style={{
            maxWidth: 600,
          }}
          initialValues={{
            remember: true,
          }}
          onFinish={onFinish}
          autoComplete="off"
        >
          <Form.Item
            label="账号"
            name="username"
            rules={[
              {
                required: true,
                message: '请输入账号!',
              },
            ]}
          >
            <Input />
          </Form.Item>

          <Form.Item
            label="密码"
            name="password"
            rules={[
              {
                required: true,
                message: '请输入密码!',
              },
            ]}
          >
            <Input.Password />
          </Form.Item>

          <Form.Item
            wrapperCol={{
              offset: 4,
              span: 16,
            }}
          >
            <Button type="primary" htmlType="submit">
              登录
            </Button>
            <Button style={{ marginLeft: '10px' }} onClick={onReset}>
              取消
            </Button>
          </Form.Item>
        </Form>
        <MyNotification notiMsg={notiMsg} />
      </div>
    </div>
  )
}

(4)新建Login.scss

bash 复制代码
.login {
  width: 100vw;
  height: 100vh;
  background-color: rgb(141, 160, 202);
  display: flex;
  justify-content: center;
  align-items: center;

  .content {
    width: 500px;
    height: 230px;
    border: 1px solid white;
    padding-top: 20px;

    h2 {
      text-align: center;
    }
  }
}

三、运行项目

bash 复制代码
npm run start

学习react,需要对js特别会,听说js会的人就不会觉得react难。继续学习js。。。vue框架对js的要求不是很高,因为里面有一些自定义的语法,怪不得我学的还算顺畅,呜呜。

相关推荐
沐爸muba3 分钟前
今日算法:蓝桥杯基础题之“星系炸弹”
前端·javascript·后端·算法·蓝桥杯
努力学习的小赵同志32 分钟前
C语言深度复习【数组和指针】
c语言·开发语言
山雀~33 分钟前
LeetCode全排列2(js简单快通法)
javascript·算法·leetcode
.远_33 分钟前
【自用16.】C++类
开发语言·c++
Lill_bin1 小时前
Redisson与Redis分布式锁
开发语言·数据库·redis·分布式·微服务·云原生·架构
qq_4924484461 小时前
python 拆分视频并且整合(速度慢,会保存每个分段视频)
开发语言·windows·python
zhangbin_2372 小时前
【Python机器学习】NLP词频背后的含义——主成分分析
开发语言·人工智能·python·机器学习·自然语言处理
程序员凡尘2 小时前
Vue.js 模板语法详解:插值表达式与指令使用指南
前端·javascript·vue.js
William数据分析2 小时前
[Python知识点]list列表append()和extend()的区别
开发语言·python
冷眼看人间恩怨2 小时前
【Qt应用】Qt编写简易文件管理系统
开发语言·qt·文件管理系统