React从零开始搭建项目

一、脚手架创建React项目

二、 删除src目录下的所有文件

三、创建App.js

import React, {Component} from "react";

/* 应用的根组件 */
export default class App extends Component {
    render() {
        return <div>App</div>
    }
}

四、创建index.js作为入口文件

如下写法是React18的写法

// 入口js
import React from "react";
import { createRoot } from 'react-dom/client';

import App from './App'

createRoot(document.getElementById('root')).render(<App/>)

效果图:
在这里插入图片描述

五、创建如下文件夹

目录名说明
apiajax相关
assets公共资源
components非路由组件
config配置
pages路由组件
utils工具模块

六、引入antd样式

下载组件库

npm i antd

实现组件库的按需打包

下载依赖(实现不打包未引入的组件,默认打包所有组件)

npm i react-app-rewired customize-cra babel-plugin-import

定义加载配置的js模块:config-overrides.js

const { override, fixBabelImports } = require('customize-cra')

module.exports = override(
    // 针对antd实现按需打包:根据import进行打包(使用babel-plugin-import)
    fixBabelImports('import', {
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: 'css' // 自动打包相关的样式
    })
)

修改package.json

  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  },

自定义antd主题

需求:antd的主题颜色从Blue变为Green
下载工具包

npm i less less-loader

修改config-overrides.js

const { override, fixBabelImports, addLessLoader } = require('customize-cra')

module.exports = override(
    // 针对antd实现按需打包:根据import进行打包(使用babel-plugin-import)
    fixBabelImports('import', {
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: true,
    }),
    addLessLoader({
        javascriptEnabled: true,
        modifyVars: {'@primary-color': '#1DA57A'}
    })
)

七、引入路由

下载依赖

 npm i react-router-dom

新建/pages/admin/admin.jsx

import React, { Component } from "react";

export default class Admin extends Component{
    render() {
        return (
            <div>admin</div>
        )
    }
}

新建/pages/login/login.jsx

import React, { Component } from "react";

export default class Login extends Component {
    render() {
        return (
            <div>login</div>
        )
    }
}

修改App.js

import React, { Component } from "react";
import { BrowserRouter, Route, Routes } from "react-router-dom";

import Login from './pages/login/login'
import Admin from './pages/admin/admin'
/*
* 应用的根组件
*/
export default class App extends Component {
    render() {
        return (
            <BrowserRouter>
                <Routes>
                    <Route path='/login' element={<Login />}></Route>
                    <Route path='/' element={<Admin />}></Route>
                </Routes>
            </BrowserRouter>
        )
    }
}

八、清除默认样式

/src/assets/css/reset.css

/* http://meyerweb.com/eric/tools/css/reset/
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

然后在app.js里引入

import './assets/css/reset.css'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值