Uroboros

博客开发 · BLOG-DEVELOPMENT2026.07.22
57 次阅读

博客开发日志 - 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给我的初版吧,个人感觉还挺好看的。

https://static.ua42.com/blog/article/bQtQM6aJEwwM3UACVrBmb.png

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

开发React数据库