在某些页面中,特别是设计到多个表单项填写的,产品需求要求:在离开页面时,需要提示用户当前页面的数据尚未保存,二次确认后才能离开页面。

大概效果如图:

幸运的是,在react-router 4中自带此类组件Prompt,这是官方示例。

支持的参数也比较简单:

  1. when:设置是否启用Prompt功能。比如表单页未填写时,就不需要离开确认。
  2. message:string。设置Prompt提示内容
  3. message:function。此时返回参数分为true/false,即bool类型。返回false就继续停留在当前页面,返回true则跳转到新页面。

所以结合参数whenmessage function可以创造无限可能,比如指定提示框等,哈哈哈哈。下面给出两篇文章参考:

  1. react-router 4中离开确认自定义
  2. react-router4相关属性api介绍

我在实际项目中,也是用到自定义弹窗的ant-design-mobile的Modal对话框,但是Modal的按钮点击函数是箭头函数,和正常情况下window.confirm同步返回不一样。所以这里需要利用Prompt的参数whenmessage function、React的render,代码如下:

render() {const { isPrompt } = this.state;return (<div className={styles.contain}><Promptwhen={isPrompt}message={(location) => {if (!isPrompt) {return true;}Modal.alert('提示', '是否确认退出补充实名资料?', [{ text: '取消' },{text: '确认', onPress: () => this.setState({ isPrompt: false,},() => this.props.dispatch(routerRedux.goBack())),},]);return false;}}/></div>)
}
复制代码

代码逻辑应该比较好懂,下面列出关键点:

  1. isPrompt:控制是否启用 Prompt。
  2. message function:默认都返回false,表示继续停留在当前页面。
  3. setState:根据Modal的点击,去改变isPrompt的值,然后再手动执行回退操作,这时Prompt未启动,就能正常离开页面。

上述步骤就顺利将异步转为同步,应该能实现很多变态的需求。

react-router中离开确认组件Prompt相关推荐

  1. React Router 中文文档(一)

    React Router 中文文档(一) React Router 中文文档(一) 官方英文文档 - https://reacttraining.com/rea... 版本 - v4.2.0 < ...

  2. React项目中裁剪图片组件使用

    前言 最近,项目中有一个需求是这样:用户上传图片之前,先对图片进行裁剪,然后上传裁剪后的图片.这个大家都不陌生,基本所有的 APP 中,用户头像都有裁剪功能.那么,在 React 项目中,如何实现呢? ...

  3. react native 中下拉列表FlatList组件的讲解以及实例demo

    RN中的下拉列表组件.以前RN的下拉列表是listView,但是这个组件的性能不咋地.当数据较多的时候就会很卡.所以RN就新出了一个FaltList组件来代替它.这里我们简单总结一下新的下拉组件. 一 ...

  4. React Native中一些常用组件用法

    View组件 View是一个支持Flexbox布局.样式.一些触摸处理.和一些无障碍功能的容器,并且它可以放到其它的视图里,也可以有任意多个任意类型的子视图. View的设计初衷是和StyleShee ...

  5. 在react工程中使用antd组件时,组件显示语言英文切换的方式

    antd组件所显示的语言是本工程所采用的默认语言,修改方法为在入口文件src/index.js中引入zhCN,然后在render中使用,如下图 import zhCN from 'antd/es/lo ...

  6. React Router路由详解

    React Router路由详解 一.基础 1.安装使用 2.React Router 中通用的组件 路由组件 BrowserRouter 和 HashRouter 路径匹配组件: Route 和 S ...

  7. React Router教程–如何使用代码示例渲染,重定向,切换,链接等

    If you have just started with React, you are probably still wrapping your head around the whole Sing ...

  8. React Router缓存路由

    本篇算是读书笔记,书是<深入理解React Router:从原理到实践> 以下代码实现基于react-router5,demo地址,代码里有微前端相关demo,所以缓存路由默认没开,src ...

  9. React Router 学习

    本次使用react-router 版本为 5.0.1 本教程前提是你的应用程序是一个web应用程序,使用'react-router-dom'包来实现页面的路由 在React router中有三种类型的 ...

最新文章

  1. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力
  2. UVA 10306 e-Coins(全然背包: 二维限制条件)
  3. [html] html标签中的lang属性有什么作用?
  4. OJ1040:(递推思想高阶)数列求和1
  5. 荣耀20青春版能升鸿蒙吗,荣耀20青春版上手 配置跑分如何
  6. Puppet 命令参数介绍(三)
  7. android studio 2.0 导入工程
  8. SpringCloud-Config
  9. Ajax请求中的Redirect()
  10. css table中设置tr行间距
  11. ZStack的VPC特性详解及实战
  12. numpy库的下载与应用
  13. mac 备份文件 太大 时间机器_Mac苹果电脑如何从时间机器恢复备份?
  14. java程序员工资有多少?java程序员现状如何?
  15. postman接口自动化图文案例介绍
  16. 自我管理五维度,遇见更好的自己
  17. 如何在Excel中批量新建工作表
  18. 手机虚拟视频替换摄像头_利用OBS虚拟摄像头实现假装开会
  19. Uber 团队放弃微服务改用宏服务,网友评论炸锅了
  20. oozie:java.lang.NumberFormatException: For input string: “30s“

热门文章

  1. 20篇「ACL2020」!抢先看自然语言处理2020在研究什么?
  2. 打通多个视觉任务的全能Backbone:HRNet
  3. SAP MM不常用功能之供应商Rebate
  4. WAIC 2021 | 思谋科技刘枢:赋能制造业需要什么样的算法平台?
  5. 华人博士发127页长文:自然语言处理中图神经网络从入门到精通
  6. 制药行业智能化发展现状趋势及建议
  7. 无需「域外」文本,微软:NLP就应该针对性预训练
  8. SAP SD基础知识之文本确定(Text Determination)
  9. 「人工智能视觉」一直被消费者忽视的工业领域应用
  10. 机器学习基础-数据降维