zoukankan      html  css  js  c++  java
  • Typescript+React封装路由拦截组件

    需求:离开切换页面检测是否保存,点击确认跳转相应路由,取消则留在本页

     react-router取消了路由守卫,自带组件Prompt可以进行路由拦截,后面借助antd的Modal封装成弹窗组件

    import { Modal } from 'antd'
    import * as React from 'react'
    import { Prompt, useHistory } from 'react-router'

    interface IRouterPromptProps {
      isBlock: boolean
      title?: string
      content?: string
      onOk?: () => void
    }

    /**
     * 路由拦截组件
     * 监听页面跳转是否需要保存信息
     */
    export const RouterPrompt = React.memo((props: IRouterPromptProps) => {
      const history = useHistory()
      const [isBlock, setIsBlock] = React.useState(props.isBlock)

      React.useEffect(() => {
        setIsBlock(props.isBlock)
      }, [props.isBlock])

      const handleClick = (location: any, action: string, type: string) => {
        if (type === 'ok') {
          setTimeout(() => {
            if (action === 'POP') {
              history.goBack()
            } else if (action === 'PUSH') {
              history.push(location)
            } else {
              history.replace(location)
            }
          }, 100)
          setIsBlock(false)
          // console.log('我已确认')
        }
      }

      return (
        <Prompt
          when={isBlock}
          message={(location, action) => {
            Modal.confirm({
              title: props.title ? props.title : '提醒',
              content: props.content ? props.content : '修改的内容尚未保存,是否继续',
              okText: '确定',
              cancelText: '取消',
              onOk: () => handleClick(location, action, 'ok'),
              onCancel: () => handleClick(location, action, 'cancel')
            })
            return false
          }}
        />
      )
    })

    export default RouterPrompt

    使用:在需要拦截的页面导入,在任一处使用

    import RouterPrompt from 'yourroute/RouterPrompt'
    <RouterPrompt isBlock title="提醒" content="修改的内容尚未保存,是否继续" />
    

      

  • 相关阅读:
    如果经常访问国外站
    CouchDB降临Android
    ubuntu server操作流程百岁版
    开源HTML解析工具包jsoup 1.3.1发布
    LEMP aka LNMP
    VC编译选项
    gae地址
    feedparser 同步博客园rss到 qq zone
    跨系统共享键盘鼠标利器分享:synergy
    支持ff,ie的回车提交
  • 原文地址:https://www.cnblogs.com/leise/p/15015600.html
Copyright © 2011-2022 走看看