当前位置: 首页 > news >正文

查企业数据要去什么网站花都区建设局网站

查企业数据要去什么网站,花都区建设局网站,php做公司网站,logo图标素材网站在 Next.js 中保持二级菜单刷新后展开状态的解决方案 在 Next.js 应用中,当页面刷新时保持二级菜单的展开状态,可以通过以下几种方法实现: 方法1:使用 URL 参数保存状态(推荐) import { useRouter } from n…

在 Next.js 中保持二级菜单刷新后展开状态的解决方案

在 Next.js 应用中,当页面刷新时保持二级菜单的展开状态,可以通过以下几种方法实现:

方法1:使用 URL 参数保存状态(推荐)

import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';const MenuComponent = () => {const router = useRouter();const { query } = router;const [expandedMenu, setExpandedMenu] = useState<string | null>(null);// 从URL参数初始化菜单状态useEffect(() => {if (query.expandedMenu) {setExpandedMenu(query.expandedMenu as string);}}, [query.expandedMenu]);const toggleMenu = (menuId: string) => {const newState = expandedMenu === menuId ? null : menuId;setExpandedMenu(newState);// 更新URL但不触发页面刷新router.push({pathname: router.pathname,query: { ...query, expandedMenu: newState }}, undefined, { shallow: true });};return (<div><div onClick={() => toggleMenu('menu1')}>主菜单1</div>{expandedMenu === 'menu1' && (<div className="submenu"><div>子菜单1</div><div>子菜单2</div></div>)}</div>);
};

方法2:使用 localStorage 保存状态

import { useEffect, useState } from 'react';const MenuComponent = () => {const [expandedMenu, setExpandedMenu] = useState<string | null>(null);// 从localStorage初始化菜单状态useEffect(() => {const savedState = typeof window !== 'undefined' ? localStorage.getItem('expandedMenu') : null;if (savedState) {setExpandedMenu(savedState);}}, []);const toggleMenu = (menuId: string) => {const newState = expandedMenu === menuId ? null : menuId;setExpandedMenu(newState);localStorage.setItem('expandedMenu', newState || '');};// 渲染逻辑同上
};

方法3:使用状态管理库(如 Zustand)

// store/menuStore.ts
import create from 'zustand';
import { persist } from 'zustand/middleware';interface MenuState {expandedMenu: string | null;toggleMenu: (menuId: string) => void;
}export const useMenuStore = create<MenuState>()(persist((set) => ({expandedMenu: null,toggleMenu: (menuId) => set((state) => ({expandedMenu: state.expandedMenu === menuId ? null : menuId})),}),{name: 'menu-storage', // localStorage的key})
);// 组件中使用
const MenuComponent = () => {const { expandedMenu, toggleMenu } = useMenuStore();// 渲染逻辑
};

方法4:使用 Cookie(服务端可获取)

import { useState } from 'react';
import { setCookie, parseCookies } from 'nookies';export const getServerSideProps = (ctx) => {const cookies = parseCookies(ctx);return {props: {initialExpandedMenu: cookies.expandedMenu || null}};
};const MenuComponent = ({ initialExpandedMenu }) => {const [expandedMenu, setExpandedMenu] = useState(initialExpandedMenu);const toggleMenu = (menuId: string) => {const newState = expandedMenu === menuId ? null : menuId;setExpandedMenu(newState);setCookie(null, 'expandedMenu', newState || '', {path: '/',maxAge: 30 * 24 * 60 * 60, // 30天});};// 渲染逻辑
};

最佳实践建议

  1. 简单场景:使用 URL 参数方法(方法1),既保持状态又方便分享链接
  2. 复杂应用:使用 Zustand 等状态管理库(方法3),特别是需要跨组件共享状态时
  3. SEO相关:如果菜单状态影响内容展示,考虑服务端方案(方法4)
  4. 用户体验:添加过渡动画使菜单展开/收起更平滑

注意事项

  1. 服务端渲染兼容性:在 useEffect 中访问 localStorage/window 等客户端 API
  2. 状态同步:确保 URL、存储和组件状态保持一致
  3. 安全考虑:不要用这些方法存储敏感信息
  4. 性能优化:对于大型菜单,考虑虚拟滚动等技术

以上方法都可以在 Next.js 应用中有效保持二级菜单的展开状态,即使在页面刷新后也能恢复之前的状态。

http://www.dtcms.com/a/558888.html

相关文章:

  • 免费自己生成网站wordpress大气企业主题
  • 杭州做网站推广公司推荐网络软文营销案例3篇
  • 网站开发 需求清单游戏app平台排行榜
  • 网站静态和伪静态意思百度热议怎么上首页
  • 信阳专业网站建设汕头市网络科技有限公司
  • tk不做了,需要的私把
  • 基于深度学习YoloV8模型垃圾分类系统 深度学习pytorch 大数据 (数据集+源码+文档)✅
  • 化工企业网站模板本地资讯网站做的最好的
  • 一线城市做网站工资有多少钱建设工程合同可以分为
  • 企业网站建设 总结长沙的网站建设
  • INT 303 Big Data Analysis 大数据分析 Pt.4 数据可视化
  • 佛山营销网站做盗版电影网站问题
  • 做结构图的网站汽车门店管理系统
  • 已申请域名怎么做网站科技小巨人培育企业
  • 江门网站推广公司上海公司注册收费
  • 建设单位网站的重要性电子商务网站建设教程
  • 个人网站可以备案深圳市工程交易中心
  • 网站开发大学python编程课哪个机构最好
  • 域名 网址 网站名称付费网站搭建
  • 自助购物网站怎么做运营推广
  • 用 Scoop 快速部署 JeecgBoot 开发环境:从依赖安装到服务管理
  • 外贸网站外贸网站建设行吗合肥房产网官网首页
  • 网站开发整体流程深圳最近消息
  • 《数据库类服务》
  • AMD MI50 在Ubuntu 24.04下安装驱动和ROCm
  • 网站方案设计规划设计公司排名
  • 家居网站建设做seo怎么设计网站
  • mstscax!CTD::TDConnectFSMProc函数调试记录==重要
  • 怎么介绍vue做的购物网站项目四川省建设厅的注册中心网站
  • 寄存器编写按键控制LED