• 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="修改的内容尚未保存,是否继续" />
    

      

  • 相关阅读:
    Python-Collections模块之defaultdict
    Python-Collections模块之deque
    Python-Collections模块之NameTuple
    Python-Collections模块之OrderedDict
    @常见的远程服务器连接工具:Xshell与secureCRT的比较!!!(对于刚接触的测试小白很有帮助哦)
    告诉你:传统测试和敏捷测试的区别!!!(比较全的解答,一看便明白)
    @软件测试环境搭建的详细流程(初学者不要错过哦,很实用)!!!!
    Netlib文件转化为mps文件
    新设备关联Gitlab
    CMake与OpenMP
  • 原文地址:https://www.cnblogs.com/leise/p/15015600.html
Copyright © 2020-2023  润新知