最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何使用react-router自定义confirm

    正文概述 掘金(半夜盗贼)   2021-02-11   725

    如何使用react-router自定义confirm

    使用 React 框架在做后台管理系统的时候经常会遇到编辑页面跳出询问的情况,react-router-dom 提供了 Prompt 组件

    <Prompt when={true} message="Are you sure you want to leave?" />
    

    来解决路由切换的问题,但是默认的实现的方式是利用window.confirm(message)弹出浏览器询问框如下

    Firfox 浏览器询问 如何使用react-router自定义confirm

    Chrome 浏览器询问 如何使用react-router自定义confirm

    显然这种丑陋且不统一的 ui 风格是不能够让产品满意的,他们更希望是类似于 Antd 的Modal.confirm的样式风格,所以我们能不能基于 react-router 进行路由拦截定制自己的Prompt组件呢?

    理论上基于beforeunload事件,显然是可以自定义的。带着这个问题我们去查看 react-router 的官方文档,我们可以在每个 Router 组件下面找到这样一个属性:

    • getUserConfirmation: func A function to use to confirm navigation. Defaults to using window.confirm.

    意思就是我们可以通过这个属性结合Prompt组件实现自定义 confirm

    <HashRouter
      getUserConfirmation={(message, callback) => {
        const allowTransition = window.confirm(message);
        callback(allowTransition);
      }}
    />
    

    getUserConfirmation属性接受一个函数,mesasage和callback作为参数传递,这里官方文档并没有对这个属性做具体介绍,他是由history这个库提供的一个api,在路由跳转前执行,mesasage参数只能接受字符串,其值就是来自Prompt的message属性值,callback是一个函数,接受一个boolean值,默认当传入参数为true的时候才会执行路由切换。

    那么我们就可以基于getUserConfirmation 和Prompt 完成自定义的congirm,代码如下

     <Suspense fallback={"加载中..."}>
            <HashRouter
              getUserConfirmation={(result, callback) => {
                // result是message 执行的结果
                Modal.confirm({
                  content: result,
                  okText: "确认",
                  cancelText: "取消",
                  onOk: () => callback(true),
                  onCancel: () => callback(false),
                });
              }}
            >
              <Link to="/">
                <Button type="primary" style={{ marginRight: 20 }}>
                  Home
                </Button>
              </Link>
    
              <Link to="/edit">
                <Button>Edit</Button>
              </Link>
    
              <Switch>
                <Route exact path="/">
                  <h2>Home</h2>
                </Route>
                <Route path="/edit">
                  <div>
                    <h2>Edit</h2>
                    <Prompt
                      when={true}
                      message={(location, action) => {
                        return "你确定要离开?";
                      }}
                    />
                  </div>
                </Route>
              </Switch>
            </HashRouter>
          </Suspense>
    

    git链接


    起源地下载网 » 如何使用react-router自定义confirm

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元