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

React antd form表单未保存跳转页面提示

需求是:
表单编辑后没保存,跳转其他页面需要提示未保存,保存就继续form的submit,反之就是关闭弹窗,再切换菜单正常跳转路由。

关键代码如下:

const [initialFormValues, setInitialFormValues] = useState({});const initialFormValuesRef = useRef(initialFormValues);const handleGeneralForm = () => {const {avatar = '',tenantName = '',timeZoneId = '',tenantEmail = '',webSite = '',address = '',} = currentUserTenant;form.setFieldsValue({avatar,tenantName,timeZoneId,tenantEmail,webSite,address,});setInitialFormValues(form.getFieldsValue());};useEffect(() => {loadGetAllTimeZone();handleGeneralForm();initialFormValuesRef.current = form.getFieldsValue();}, []);const [deleteConfirmOpen, setDeleteConfirmOpen] = useState(false);const [blockOpen, setBlockOpen] = useState(false);const deleteAvatar = () => {form.setFieldsValue({avatar: '',icon: '',});setDeleteConfirmOpen(false);};useEffect(() => {const unblock = history.block(({ location, action }) => {if (action === 'PUSH' || action === 'REPLACE') {const pathname = location.pathname;unblock();const isFormChanged = isEqual(form.getFieldsValue(), initialFormValuesRef.current);if (!isFormChanged) {setBlockOpen(true);} else {history.push({pathname: pathname,search: location.search,});}}});return () => {unblock();};}, []);

import { isEqual } from 'lodash';

const isFormChanged = isEqual(form.getFieldsValue(), initialFormValuesRef.current);

这就是个对比

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【git】github中的Pull Request是什么
  • 医学深度学习与机器学习融合的随想
  • MFC列表框示例
  • watch监听vue2与vue3的写法
  • 梧桐数据库:数据库技术中表之间的连接算法详解
  • 第2章-数学建模
  • Spring Authorization Server 自定义 OAuth2 密码模式返回数据结构优化
  • AndroidStudio 编辑xml布局文件卡死问题解决
  • 七天打造一套量化交易系统:Day2-量化交易策略基本模型及要点
  • Oracle(8)什么是Oracle实例(Instance)?
  • 用Redisson写一个库存扣减的方法
  • 08、Tomcat 部署及优化
  • Ubuntu 24.04 LTS Noble安装Docker Desktop简单教程
  • Python面试宝典第17题:Z字形变换
  • 微信小程序面试题汇总
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Django 博客开发教程 8 - 博客文章详情页
  • express + mock 让前后台并行开发
  • HTTP 简介
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript的使用你知道几种?(上)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Node项目之评分系统(二)- 数据库设计
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring声明式事务管理之一:五大属性分析
  • 翻译--Thinking in React
  • 猴子数据域名防封接口降低小说被封的风险
  • 技术发展面试
  • 精彩代码 vue.js
  • 开发基于以太坊智能合约的DApp
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何进阶一名有竞争力的程序员?
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序填坑清单
  • 项目管理碎碎念系列之一:干系人管理
  • 一、python与pycharm的安装
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • !$boo在php中什么意思,php前戏
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (三)模仿学习-Action数据的模仿
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (自适应手机端)响应式服装服饰外贸企业网站模板