react项目搭建和基本配置

1. 使用CRA创建项目
npx create-react-app react-jike
清除目录中不需要的文件 
2.安装scss
npm install sass -D
3.安装Ant Design 组件库 安装成功
npm install antd --save  

4.配置基础路由Router

配置步骤
1. 安装路由包 react-router-dom
2. 准备基础路由组件(任意的页面都可以,一般都包括login,layout等)
3. 在router/index.js文件中引入组件进行路由配置, 导出router实例
4. 在入口文件中渲染 <RouterProvider/> ,传入router实例
ReactRouter官方网址:

5.配置@别名路径

1.首先安装 craco配置,,安装完了之后重新npm run start 运行项目
命令:npm i @craco/craco -D
2. 针对路径转换,修改webpack别名路径配置 craco,文件名:craco.config.js
// 扩展webpack配置
const path = require('path')

module.exports = {
  // webpack 配置
  webpack: {
    // 配置别名
    alias: {
      // 约定:使用 @ 表示src 文件所在路径
      '@': path.resolve(__dirname, 'src')
    }
  }
}
配置好了之后引入文件的时候就可以使用@符号来引入了
3. 针对联想提示,修改VSCode配置 jsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@/*": [
        "src/*"
      ]
    }
  }
}
效果图如下:刚开始的时候这个效果图并没有出来,关闭vscode之后,重新打开效果图就出来了,所以这样配置没有问题

6.使用gitee管理项目

1. 在gitee上初始化一个空项目仓库
基于craco创建的项目已经在本地初始化好了一个项目了、
如果提示没有初始化,直接git init即可
2. 把远程仓库和本地仓库关联
git remote add origin https://gitee.com/liaowenfeng1/react-jike.git
3. 提交代码到远程仓库
git add .
git commit -m 'first commit'
git push 
// 初次提交会提示这个,跟着提示写上命令即可
git push --set-upstream origin master
注意:父路径不要git init 初始化,否则会报错,本地仓库的文件提交不到远程仓库里面去

7.封装request请求模块

1. 几乎所有的接口都是一样的接口域名
2. 几乎所有的接口都需要设置一样的超时时间
3. 几乎所有的接口都需要做Token权限处理

8.使用Redux管理token

npm i react-redux @reduxjs/toolkit --legacy-peer-deps
//忽略了安装包时node版本不匹配的冲突 --legacy-peer-deps

9.登录-Token持久化

现存问题
Redux存入Token之后如果 刷新浏览器, Token会丢失(持久化就是防止刷新时丢失Token)
问题原因
Redux是基于浏览器内存的存储方式,刷新时状态恢复为初始值(在没有持久化存储之前:我的理解是既然是基于浏览器存储的,而token是点击登录页当中的登录按钮之后存入到redux当中的,当我点击登录进入首页之后,再次刷新,本地没有存储,token为空字符串,而首页也并没有获取token的地方,token没有存储到redux,只有登录页才有,在登录页时点击按钮token才能存储到redux,所以首页刷新之后,token会消失,为一个空字符串)
const userStore = createSlice({
  name: 'user',
  // 数据状态
  initialState: {
    token: localStorage.getItem('token-key') || ''
  },
  // 同步修改方法
  reducers: {
    setToken(state, action) {
      // 这样写了既可以存在redux,又可以存在本地
      state.token = action.payload
      // localStorage
      localStorage.setItem('token_key', action.payload)
    }
  }
})
刷新之后的效果图:
登录-封装Token的存取删方法
对于Token的各类操作在项目 多个模块中都有用到 ,为了 共享复用 可以封装成工具函数

10.Axios请求拦截器注入Token

  const token = getToken()
  if (token) {
    config.headers.Authorization = `Bearer ${token}`  // 固定写法,必须这样做
  }

11.使用Token做路由权限控制

相关代码:
import { getToken } from "@/utils";
import { Navigate } from "react-router-dom";
function AuthRoute({ children }) {
  const token = getToken()
  if (token) {
    return <>{children}</>
  } else {
    return <Navigate to='/login' replace />
  }
}
export {
  AuthRoute
}

router/index.js

// 路由实例
const router = createBrowserRouter([
  {
    path: "/",
    element: <AuthRoute><Layout /></AuthRoute> // 有token的情况下就正常返回组件,可以用这种方法去处理多个路由组件
  },
  {
    path: "login",
    element: <Login />
  },
]);

在项目中引入normalize.css来重置样式

网址:Normalize.css: Make browsers render all elements more consistently.

npm install normalize.css

12.Layout-二级路由配置

新理解:在一个界面当中点击跳转的就是二级路由,就是当前页面当中还有其他需要跳转的就是二级路由了,如果完全换成了另外一个界面,那就是一级路由,比如说登录页,404页面等

13.Layout-根据当前路由路径高亮菜单

实现效果:页面在 刷新时 可以根据当前的路由路径让对应的左侧菜单高亮显示
(点击路由菜单,将他存到本地,刷新之后根据这个路由存取出来即可)
思路:
1. 获取当前url上的路由路径
2. 找到菜单组件负责高亮的属性,绑定当前的路由路径
  // 反向高亮
  // 1.获取当前路由路径
  const location = useLocation()
  console.log(location.pathname)
  const selectedKey = location.pathname
  // 获取到当前路由

菜单栏:

            <Menu
            mode="inline"
            theme="dark"
            selectedKeys={selectedKey}
            onClick={onMenuClick}
            items={items}
            style={{ height: '100%', borderRight: 0 }}></Menu>

14.Layout-展示个人信息

关键问题:用户信息应该放到哪里维护?
和Token令牌类似,用户的信息通常很有可能在多个组件中都需要 共享使用 ,所以应该放到 Redux中维护

15.Layout-退出登录实现

1. 提示用户是否确认要退出( 危险操作,二次确认
2. 用户确认之后清除用户信息( Token以及其它个人信息,需要在退出登录时清除的
3. 跳转到登录页( 为下次登录做准备

16.Layout-处理Token失效

什么是Token失效?
为了用户的安全和隐私考虑,在用户 长时间未在网站中做任何操作 规定的失效时间到达 之后,当前的Token就会失效 ,一旦失效,不能再作为用户令牌标识请求隐私数据
前端如何知道Token已经失效了?
通常在Token失效之后再去请求接口,后端会返回 401状态码, 前端可以监控这个状态做后续的操作
代码:
if (error.response.status === 401) {
    removeToken()
    router.navigate('/login')
    // 只写到这个地方的话,点击刷新,如果token失效了,会显示报错信息,存在本地当中的token数据被清除了,但是并没有跳转到首页,这是一个bug,后面强制刷新就可以解决了
    window.location.reload()
  }

错误显示:

API模块封装
Echarts组件封装实现
  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React项目搭建路由配置,你可以使用React Router库来实现。下面是一些基本步骤来配置路由: 1. 首先,确保你的项目中已经安装了React Router库。你可以使用以下命令进行安装: ``` npm install react-router-dom ``` 2. 在你的项目中创建一个`Routes`组件,用于定义不同路径下的页面组件。这个组件将会被用作主要的路由配置。 ```jsx import React from 'react'; import { BrowserRouter, Route, Switch } from 'react-router-dom'; import Home from './components/Home'; import About from './components/About'; import NotFound from './components/NotFound'; const Routes = () => { return ( <BrowserRouter> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> <Route component={NotFound} /> </Switch> </BrowserRouter> ); }; export default Routes; ``` 在这个示例中,我们定义了三个路由: - `/`路径对应`Home`组件 - `/about`路径对应`About`组件 - 任何其他路径都会渲染`NotFound`组件 你可以根据你的需求添加更多的路由。 3. 在你的根组件中引入`Routes`组件,并将其放置在合适的位置。 ```jsx import React from 'react'; import Routes from './Routes'; const App = () => { return ( <div> {/* 其他组件 */} <Routes /> {/* 其他组件 */} </div> ); }; export default App; ``` 这样,你的路由配置就完成了。你可以根据需要在不同的页面组件中使用`<Link>`标签来导航到不同的路径。 希望这个简单的路由配置能够帮到你。如果你有任何其他问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值