记录一下自己的React开发项目初始化流程

302 阅读1分钟

项目配置

建立相应的文件夹

在src路径下,方便进行管理

image.png

修改icon title

在public/index.html 页面下进行修改
通常logo为ico格式

配置craco

react不知道@是什么,但是react脚手架隐藏了webpack 如何去修改? 通过craco进行配置

 npm install @craco/craco@alpha

在src下添加 craco.config.js

image.png

const path = require('path');
const resolve = pathname => path.resolve(__dirname, pathname);
module.exports = {
    webpack: {
        alias: {
            "@": resolve("src"),
            "components": resolve("src/components"),
            "utils": resolve("src/utils")
        }
    }
}

在webpack里也要进行修改
如果没有path报错,安装一下这个
npm i -D @types/node

    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "craco eject"

在修改完webpack配置后,项目需要重启才能生效

css样式重置

normalize.css

npm install normalize.css

reset.less

如何引进less文件?
npm i craco-less@2.1.0-alpha.0
const CracoLessPlugin = require('craco-less');
plugins: [ { plugin: CracoLessPlugin } ]

body {
    margin: 0;
    padding: 0;
}
a {
    text-decoration: none;
}
li {
    list-style: none;
}
img {
    vertical-align: top;
}

也可以使用sass进行配置
npm i --save-dev sass

路由配置

安装 npm install react-router-dom
在主文件(index.js)里面引入HashRouter
import { HashRouter } from 'react-router-dom';
之后用HashRouter包裹组件
使用Hooks {useRoutes(routes)}
routes为设置的文件

import React from "react"
import { Navigate } from "react-router-dom";

const Home = React.lazy(()=>import('@/views/home'));
const Entire = React.lazy(()=>import('@/views/entire'));
const Detail = React.lazy(()=>import('@/views/detail'));
const routes = [
    {
        path:'/',
        element: <Navigate to='/home'/>
    },
    {
        path: "/home",
        element: <Home/>
    },
    {
        path:'/entire',
        element: <Entire/>
    },
    {
        path:'/detail',
        element: <Detail/>
    }
]
export default routes

为了防止异步加载无法加载页面,引入Suspense

image.png

image.png

Redux配置

@reduxjs/toolkit方式
npm install @reduxjs/toolkit react-redux

image.png

image.png

image.png

image.png

axios网络请求方法封装

npm install axios

image.png

import axios from "axios";
import {BASE_URL, TIMEOUT} from './config'
class BearRequest {
    constructor(baseURL, timeout){
        this.instance = axios.create({
            baseURL,
            timeout
        })
        this.instance.interceptors.response.use((res)=>{
            return res.data;
        }, err=>err);
    }
    request(config) {
        return this.instance.request(config);
    }
    get(config) {
        return this.request({...config, method: "get"});
    }
    post(config) {
        return this.request({...config, method: "post"});
    }
}
export default new BearRequest(BASE_URL, TIMEOUT);