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

东莞网站定制123网址之家118

东莞网站定制,123网址之家118,单页网站编辑器,南宁门户网站有哪些在 react umi 中对离开页面的行为进行自定义弹窗拦截控制。以下为可选的方案分析。 wrapper 首先,因为项目框架是 umi,最先想到了 umi 路由的 wrapper 装饰器,但仔细一想又不太对, wrapper 争对于跳转到某个特定页面的前置行为…

在 react + umi 中对离开页面的行为进行自定义弹窗拦截控制。以下为可选的方案分析。

wrapper

首先,因为项目框架是 umi,最先想到了 umi 路由的 wrapper 装饰器,但仔细一想又不太对, wrapper 争对于跳转到某个特定页面的前置行为,而我需要是离开某个页面行为的拦截,该思路 Pass。

beforeunload

其次,想到的是原生的 windows 事件:beforeunload

useEffect(()=> {  window.addEventListener('beforeunload', (event: BeforeUnloadEvent) => {  event.preventDefault();  event.returnValue = "";  })  
}, [])

不过这样做,只能拦截到刷新行为,同时还是浏览器默认的那个巨丑的弹框,Pass。

history.block

最后,umi 提供了 history(类似 react-router v4 的 useHistory),利用其 block 方法可以实现我们的需求

需求概述:当提交表单后,页面处于加载等待结果的过程中,需要拦截用户离开页面的行为,通过弹框警告其需要等待过程完成才能离开页面,仅提供 确定/知道 按钮,不提供继续按钮。

思路:通过 history.block 监听用户离开的事件,当页面处于 loading 状态,阻塞页面,并显示自定义弹框,弹框中有一个确定按钮,点击效果仅为关闭这个弹窗;当页面不处于 loading,解锁路由;如果弹窗需要提供继续离开的按钮,可以手动 history.push(next) 到之前触发 block 时获取到的下一个路由(next),伪代码:

import { Button, Modal } from 'antd';
import { history } from '@umijs/max';const [loading, setLoading] = useState(false);  // 某容器加载
const [blockOpen, setBlockOpen] = useState(false);
const [unblock, setUnblock] = useState<Function>();
const [next, setNext] = useState('');useEffect(()=> {  if (loading) {  setUnblock(history.block(({location})=> {  setNext(location.pathname);setBlockOpen(true);return false;  }))} else {unblock?.(); 
}, [loading, unblock])const Leave = () => <Button onClick={() => {unblock?.();if (next) {history.push(next);}
}}><Button>export default function Reconc() {return(<>/** 上面应当有一个容器绑定loading,通过某些控件控制器其加载状态 */<Modal open={blockOpen} footer={<Button type="primary" onClick={() => setBlockOpen(false)}><Button>}><span>操作尚未完成,请等待操作结束再离开页面!<span></Modal></>)
}

基本实现方案就是这样,Bingo!

http://www.yayakq.cn/news/301097/

相关文章:

  • 莱芜网站建设设计外包iis 网站显示建设中
  • 2021搜索引擎排名网站布局优化怎么做
  • 三层架构做网站还是系统深圳网站设计招聘网
  • 网站建设规划书怎么写做企业门户网站都
  • 网站建设系统分析销售管理软件排名
  • asp开源企业网站教程用友加密狗注册网站
  • 大型网站得多少钱广州东圃网站建设公司
  • 城乡与建设厅网站首页苏中建设集团网站
  • 一个网站可以做多少地区词徐州官方发布
  • 广州专业网站建设哪里有商场设计理念
  • 北京金港建设股份有限公司网站wordpress ishopping
  • 画室网站模板中国建设银行官网首页 网站首页
  • epcms网站模板制作网站可用性监控
  • 银川网站开发推广企业做企业网站市场分析
  • 建设银行信用卡官网站首页中国十大门窗品牌排行榜
  • 专业简历制作网站推荐关于个人工作室网站模板
  • 甘肃省通信管理局 网站备案电商网站有哪些特色
  • 做明星网站打广告上海网站建设导航
  • 办公门户网站模板霞浦网站建设
  • 建网站 主流软件wordpress不显示模板
  • 网站域名备案做网站网页挣钱不
  • 现在网站开发都什么技术网站做的自适应体验差
  • 贵阳网站制作 建设wordpress 标签页
  • 广州网站建设gzzhixun北京网站制作设计
  • 推广网站哪个好泉州机票网站建设
  • 沈阳设计培训网站建设佛山大良营销网站建设
  • 汉阳做网站执业医师报考条件2022年最新规定
  • 天津集团网站建设工程建设监理网站
  • 网站手机端生成智能营销型网站
  • 宁波市网站建设制作费用商丘做网站推广