前端er Go-Frame 的学习笔记:实现 to-do 功能(二)

文章目录


效果

相关

前端er Go-Frame 的学习笔记:实现 to-do 功能(一)


目标

上一章已经把后端实现了大概的功能,目前写一下前端,在构建的过程中可能要改改后端不合理的地方,比如:

  • 请求的资源应该是复数,所以要修改后端的路由 todo => todos
  • 先把前端的页面画出来,alova 的使用要学习一下
  • 乐观更新是什么?

前端

前端的话,我想看一下 Alova 的使用方法,然后想一下如何简化前端,只用写资源名字,即可做到增删改查,

技术栈的话,选择 React 19 + Antd 6 + Alova


搭建前端基础代码

在项目根目录下,用 vite 的脚手架来搭建项目

bash 复制代码
pnpm create vite

然后输入项目名,选择框架等等

搭建好基础之后,把 antdalova 安装一下

再安装一些 eslint, antfu-eslint,具体的使用配置可以看这个:https://github.com/antfu/eslint-config

bash 复制代码
pnpm i -D eslint @antfu/eslint-config

然后写一下 eslint-config.js

js 复制代码
import { antfu } from '@antfu/eslint-config'

// 第一个对象是基础配置(你没写东西)
// 第二个对象是覆盖 antfu 内置规则
export default antfu({

}, {
    rules: {
        'no-console': 'off',                           // 允许使用 console.log,不再警告
        'prefer-const': 'off',                         // 允许使用 let,不强制要求用 const
        'ts/ban-ts-comment': 'off',                    // 允许使用 @ts-ignore / @ts-nocheck 等注释
        'no-case-declarations': 'off',                 // 允许在 switch/case 里直接写 const/let
        'ts/no-use-before-define': 'off',              // 允许变量或函数在定义前被使用
        'ts/no-unused-expressions': 'off',             // 允许类似条件 && 表达式的写法
        'ts/no-empty-object-type': 'off',              // 允许定义空对象类型 type A = {}
        'ts/no-unsafe-function-type': 'off',           // 允许使用 any 函数签名 (...args: any[]) => any
        'ts/consistent-type-definitions': 'off',       // 不强制只能用 type 或 interface,随便写
        'style/indent': ['error', 4],                  // 强制使用 4 空格缩进
        'style/jsx-indent-props': ['error', 4],        // JSX 属性缩进也是 4 空格
        'prefer-promise-reject-errors': 'off',         // 允许 reject('xxx'),不强制必须 new Error()
        'eslint-comments/no-unlimited-disable': 'off', // 允许写 /* eslint-disable */ 禁用所有规则
    },
})

ok,依赖安装完之后,来看看这个空的项目,配置一下环境,以及 vite 的代理 proxy,和 tsconfig.json

  • 配置 tsconfig.json,用于改变 ide 代码编辑器的配置,比方说 @ 这种 alias
  • 配置 vite.config.json 中的 @ 用于打包时候的描述,以及 proxy 代理请求后端接口

配置 tsconfig.json


后端:统一接口为 v1 版本,路由分组

还记的写后端时遇到的疑问吗 https://goframe.org/quick/scaffold-api-definition,为什么用 /api/v1 当借口的前缀

目前后端是没有接口路由分组的,所以来改一下后端,让前端以后通过 /api/v1/todo 来访问


前端:引入 alova,配置实例

前端的话,要改这几个文件

  • Alova 的实例的 baseUrl 改一下
  • .env 文件也改改

这些就算是前端的配置了

ts 复制代码
// api/alova.ts
import { createAlova } from 'alova'
import adapterFetch from 'alova/fetch'
import ReactHook from 'alova/react'

export const alovaInstance = createAlova({
    baseURL: '/api/v1', // 这里会自动拼接到每个接口的前面的
    requestAdapter: adapterFetch(),
    responded: response => response.json(),
    statesHook: ReactHook, // 如果写 react 的话,要引入这个,不然白屏
})

然后写一下页面

js 复制代码
// 页面 todo.tsx
import { useRequest } from 'alova/client'
import { Button } from 'antd'
import { alovaInstance } from '@/api/alova'

export function PageTodo() {
    const { data } = useRequest(
        alovaInstance.Get('/todo'),
    )
    console.log('data:>>', data)
    return (
        <>
            <div>
                这是 todo 的页面
            </div>
            <Button>点我123312</Button>
        </>
    )
}

然后再浏览器中试一下,可以看到前端能请求到接口了!

这里其实并没有那么顺利

当我没有改后端的 /api/v1 分组之前,前端是请求不到后端的,我以为是后端没有配置跨域,(后来我也没去配置 go-frame 的跨域,因为不是这个问题)

是因为什么呢,就是 vite 的代理,我以为前端请求的 /api/v1/todo,就会走代理,之后代理会把 api/v1 给去掉,但是这个想法是错误的


前端页面功能的实现

我准备把 tailwindcss 也安装一下,具体怎么安装可以看一下这个 https://tailwindcss.com/docs/installation/using-vite

然后让 AI 先写一个简单的页面

之后把其他功能实现一下

不过我看每次更新之后命中了 alova 的缓存了,导致刷新之后页面的数据没有更新(但是数据库已经更改了)

查了一下官方文档, 这里有个强制请求,我可以在 Alova 中配置一下这个接口


源仓库

https://github.com/Lovely-Ruby/learn-go-frame

接下来准备把这两个项目放到 Docker

相关推荐
苏打水com44 分钟前
第三篇:Day7-9 响应式布局+JS DOM进阶——实现“多端兼容+动态数据渲染”(对标职场“移动端适配”核心需求)
前端·css·html·js
一 乐1 小时前
旅游出行|基于Springboot+Vue的旅游出行管理系统设计与实现(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·旅游
九千七5261 小时前
sklearn学习(6)决策树
人工智能·python·学习·决策树·机器学习·sklearn
想睡好1 小时前
元素的显示和隐藏 html5和css3的一些新特性
前端·css3·html5
p***32351 小时前
Nginx 配置前端后端服务
运维·前端·nginx
我看刑1 小时前
【已解决】el-date-picker type=“datetime“限制(动态)可选时间范围,精确到分钟!!!
前端·javascript·vue.js
丝斯20111 小时前
AI学习笔记整理(28)—— 计算机视觉之姿态估计与动作识别
人工智能·笔记·学习
周周爱喝粥呀2 小时前
【基础】Three.js 实现 3D 字体加载与 Matcap 金属质感效果(附案例代码)
前端·javascript·vue.js·3d
严文文-Chris2 小时前
【监督学习常用算法总结】
学习·算法