项目使用zustand框架作为状态管理库,状态管理库我在jotai
,valtio
,zustand
这三个犹豫了很久,看了很多他们三个的文章,这三个使用起来差不多,可以根据个人喜好选择,我最终还是选择了zustand。 zustand
的入门文档推荐看这两篇文章:
谈谈复杂应用的状态管理(上):为什么是 Zustand 谈谈复杂应用的状态管理(下):基于 Zustand 的渐进式状态管理实践
目前我在项目中使用zustand存储全局公共属性,比如国际化的当前语言、菜单的展开收起状态、主题,后面实现登录功能后,也会把用户信息存进去。
下面代码中devtools和persist是zustand中间件,devtools借助google redux插件方便调试,persist可以把数据持久化到localStorage中。
菜单收起和展开功能实现
使用reduxgoogle插件查看数据
持久化到localStorage中的数据
项目样式使用的是windicss框架,用这个框架实现暗黑主题切换很简单,只需要在样式前面加上:dark,然后动态设置body的class样式,就能快速实现暗黑主题切换。官方文档。
暗黑主题下背景颜色是rgb(33,41,70),亮色主题下是rgb(94,53,177)
import { RouterProvider, createHashRouter } from 'react-router-dom';
function App() {
const router = createHashRouter(
[
{
path: '/user/login',
Component: Login,
}, {
path: '/',
Component: BasicLayout,
children: routeConfig,
}, {
path: '*',
Component: Result404,
}
]
);
return (
<RouterProvider router={router} />
)
}
上面配置了登录页面和layout,还有404页面,如果页面路由都没匹配上才会显示404页面。
路由配置
因为做了路由懒加载,所以切换页面的时候,加了一个loading,用的是nprogress组件。
icon方案使用的是我前面分享过的一个方案
开发中使用iconfont太麻烦了,于是我写了这款vscode插件,支持react和vue。
国际化方案使用的是i18n-next这个库,使用起来特别简单。使用这个库的原因是它支持动态加载国际化内容,目前国际化内容是放在本地的,后面会把国际化信息存到后端,方便业务翻译。我前面也分享过一篇国际化的文章,可以快速的做国际化。
开发过程中,因为国际化太麻烦,我写了这款vscode国际化插件。
业务代码中使用
切换语言
国际化效果
移动端适配主要使用了windicss和antd的Row、Col组件。
借助react-use库封装一个快速判断是小屏还是大屏的hooks,可以在代码中使用判断。
使用Row、Col组件在不同屏幕大小下显示不同数量。
阅读量:2020
点赞量:0
收藏量:0