博客开发日志 - day11
今天把管理系统的逻辑bug修复了,完成了博客的归档分类功能
因为后台管理系统的404和loading逻辑存在问题,使用kimi帮我分析问题的关键,我发现我一直存在一个误区,因为第一个参考的arco-pro是使用的react-router,所以我理所当然的把init逻辑放到useEffect里,结果发现第一次没鉴权时加载的路由只有login和404,这就导致我刷新界面会先闪出404再出界面,这个问题我之前想过用全局loading解决,没想到ai给的方法更好,直接先渲染loading,等到初始化完成再渲染主路由,我之前是通过一个flag来控制loading的,完全没想到还能这样做,不过我react也是边写边学的,也是个半吊子吧。
typescript
复制代码
const bootstrap = async () => {
const root = ReactDOM.createRoot(document.getElementById('root')!)
root.render(<Loading />)
try {
await useStore.getState().init()
} finally {
const router = setupRouter(useStore.getState().userInfo?.menus || [])
root.render(
<StrictMode>
<TooltipProvider>
<QueryClientProvider client={queryClient}>
<RouterProvider router={router} />
<Toaster position='top-center' />
</QueryClientProvider>
</TooltipProvider>
</StrictMode>,
)
}
}另外一个问题是,没想到tanstack-query还有beforeLoad的方法,这样的话可以在路由加载前进行跳转,这点和vue的路由守卫很像, 比起react的保护路由对我来说好理解多了。
今天在写博客归档数据的时候,发现查出归档数据很简单,但在后端把数据处理成想要的格式,还是有点困难的,因为我对go的语法不是很熟悉,只能借助ai来帮我写,然后自己一点点去理解,代码逻辑还是不难,只是要定义结构体和切片的append操作让我感觉有点麻烦。话说这代码在前端我肯定是写几个for循环来做了,ai给的代码还是高级。
go
复制代码
archive := make([]response.ArchiveYear, 0)
for _, item := range list {
y := item.PublishedAt.Year()
m := int(item.PublishedAt.Month())
if len(archive) == 0 || archive[len(archive)-1].Year != y {
archive = append(archive, response.ArchiveYear{
Year: y,
Total: 0,
ArchiveMonth: make([]response.ArchiveMonth, 0),
})
}
// 获取索引
lastYearIndex := len(archive) - 1
months := archive[lastYearIndex].ArchiveMonth
if len(months) == 0 || months[len(months)-1].Month != m {
archive[lastYearIndex].ArchiveMonth = append(archive[lastYearIndex].ArchiveMonth, response.ArchiveMonth{
Month: m,
Archive: make([]response.ArchivePost, 0),
})
}
lastMonthIndex := len(archive[lastYearIndex].ArchiveMonth) - 1
archive[lastYearIndex].ArchiveMonth[lastMonthIndex].Archive =
append(archive[lastYearIndex].ArchiveMonth[lastMonthIndex].Archive, response.ArchivePost{
ID: item.ID,
Slug: item.Slug,
Title: item.Title,
PublishedAt: item.PublishedAt,
PublishedAtDisplay: item.PublishedAt.Format("01-02"),
CategoryName: *item.CategoryName,
})
archive[lastYearIndex].Total++
}
既然数据解决了,渲染无非也就是几个for循环的事了,样式的话就先用kimi给我的初版吧,个人感觉还挺好看的。

好累,先睡觉了,后面要做的应该就是统计ip了,目前的阅读量统计是通过访问接口增加的,同一个ip刷新一次就增加一次,这点肯定是有问题的