React框架创建项目详细流程-项目的基本配置-项目的代码规范(二)

简介: React框架创建项目详细流程-项目的基本配置-项目的代码规范(二)

首先进行安装: npm i craco-less

最新版本React同样会有适配问题, 安装方式: npm i craco-less@2.1.0-alpha.0

安装完成按照如下方式配置less, 配置完成创建一个less文件测试一下, 样式生效就配置成功了

const path = require('path')
const CracoLessPlugin = require('craco-less')
const reslove = pathname => path.resolve(__dirname, pathname)
module.exports = {
  // less
  plugins: [
    {
      plugin: CracoLessPlugin
    }
  ],
  webpack: {
    alias: {
      "@": reslove("src")
    }
  }
}

目录结构

接下来对项目src文件夹下进行目录结构的划分, 我是按照如下方式进行划分的:

assets: 存放静态资源 (如css, img等等)

base-ui: 存放一些通用的组件, 不只是本项目, 其他项目也会使用的组件

components: 存放本项目中通用的组件

hooks: 自定义的hook函数

router: 路由相关

services: 网络请求相关

stores: 状态管理, redux相关

utils: 封装的工具函数

views: 页面相关

eb4ccd14b3ec4576b3244ad8ba02db73.png

样式重置

对默认CSS样式进行重置:

下载normalize.css, 再在src中的index文件引入normalize.css

可以通过npm安装npm i normalize.css

import React from 'react'
import ReactDOM from 'react-dom/client'
// 引入样式重置文件
import "normalize.css"
import App from './App'
const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<App/>)

创建一个reset.css文件, 用来自己编写一些样式的重置

* {
  margin: 0;
  padding: 0;
}
a {
  text-decoration: none;
  color: #000;
  outline: none;
}
ul, li {
  list-style: none;
}
input {
  outline: none;
  border: none;
}
i {
  font-style: normal;
}

并且引入

import React from 'react'
import ReactDOM from 'react-dom/client'
// 引入样式重置文件
import "normalize.css"
import "./assets/css/reset.css"
import App from './App'
const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<App/>)

Router配置

安装: npm i react-router-dom

安装完成配置映射关系即可, 示例代码如下:

import React from "react"
import { Navigate } from "react-router-dom"
// 懒加载
const Home = React.lazy(() => import("@/views/home"))
const Detail = React.lazy(() => import("@/views/detail"))
const Entire = React.lazy(() => import("@/views/entire"))
const routes = [
  {
    path: "/",
    element: <Navigate to="/home"/>
  },
  {
    path: "/home",
    element: <Home/>
  },
  {
    path: "/detail",
    element: <Detail/>
  },
  {
    path: "/entire",
    element: <Entire/>
  }
]
export default routes

配置完成使用, 还需要在src目录下index.js文件中, 对App组件进行包裹

import React, { Suspense } from "react"
import ReactDOM from "react-dom/client"
import { BrowserRouter } from "react-router-dom"
import App from "./App"
const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(
  <BrowserRouter>
    <Suspense fallback="lodaing">
      <App/>
    </Suspense>
  </BrowserRouter>
)

Redux状态管理

Redux有两种模式

普通方式: 目前项目中依然使用率非常高;

@reduxjs/toolkit方式: 推荐方式, 未来的趋势;(下面简单演示一样rtk模式)

rtk模式安装: npm i @reduxjs/toolkit react-redux

安装完成后再store文件夹下的index.js中进行配置

import { configureStore } from '@reduxjs/toolkit'
const store = configureStore({
  reducer: {}
})
export default store

同样需要对根组件App进行包裹

import React, { Suspense } from "react"
import ReactDOM from "react-dom/client"
import { Provider } from "react-redux"
import App from "./App"
import store from "./stores"
const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(
  <Provider store={store}>
    <App/>
  </Provider>
)

axios配置

项目中我采用axios发送网络请求

首先安装axios: npm i axios

一般会对axios进行二次封装, 代码如下

import axios from "axios";
import { BASE_URL, TIMEOUT } from "./config";
class YQRequest {
  // 传入默认配置信息, 创建新的实例
  constructor(baseURL, timeout=10000) {
    this.instance = axios.create({
      baseURL,
      timeout
    })
    // 响应成功的拦截, 返回res.data
    // this.instance.interceptors.response.use(res => {
    //   return res.data
    // }, err => {
    //   return err
    // })
  }
  // 1.封装request
  request(config) {
    // 返回一个Promise, 对数据转换
    return new Promise((reslove, reject) => {
      this.instance.request(config).then(res => {
        reslove(res.data)
      }).catch(err => {
        reject(err)
      })
    })
  }
  // 2.封装get
  get(config) {
    //  调用自己的request函数
    return this.request({ ...config, methods: "get" })
  }
  // 3.封装psot
  post(config) {
    //  调用自己的request函数
    return this.request({ ...config, methods: "post" })
  }
}
export default new YQRequest(BASE_URL, TIMEOUT)
export const BASE_URL = "http://codercba.com:1888/airbnb/api"
export const TIMEOUT = 10000


相关文章
|
1月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
78 9
|
29天前
|
存储 前端开发
在React框架中,如何使用对象来管理组件的状态
在React中,组件状态通过`state`对象管理,利用`setState`方法更新状态。状态变化触发组件重新渲染,实现UI动态更新。对象结构清晰,便于复杂状态管理。
|
1月前
|
开发框架 前端开发 JavaScript
React 框架的优点和缺点是什么?
React框架作为当前主流的前端开发框架之一,具有诸多优点,同时也存在一些缺点
|
1月前
|
JavaScript 前端开发 算法
React 框架和 Vue 框架的区别是什么?
React框架和Vue框架都是目前非常流行的前端JavaScript框架,它们在很多方面存在区别
|
1月前
|
移动开发 前端开发 JavaScript
React框架
React是一个用于构建用户界面的JavaScript库,由Facebook开发并于2013年开源,目前在前端开发领域得到了广泛的应用。
|
2月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
1月前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
37 0
|
2月前
|
前端开发 JavaScript UED
构建现代Web应用:使用React框架打造单页面应用
【10月更文挑战第9天】构建现代Web应用:使用React框架打造单页面应用
|
2月前
|
前端开发 JavaScript 开发者
探索现代Web前端技术:React框架入门
【10月更文挑战第9天】 探索现代Web前端技术:React框架入门
|
3月前
|
前端开发 JavaScript API
React、Vue.js 和 Angular前端三大框架对比与选择
前端框架是用于构建用户界面的工具和库,它提供组件化结构、数据绑定、路由管理和状态管理等功能,帮助开发者高效地创建和维护 web 应用的前端部分。常见的前端框架如 React、Vue.js 和 Angular,能够提高开发效率并促进团队协作。
168 4