最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 解析 url query 的一些小技巧

    正文概述 掘金(ywwhack)   2020-12-27   457

    大背景

    这两天因为要写一个新项目,重拾了 react-router-dom 这个库,但是翻遍了整个文档,居然发现没有 query 解析的功能,唯一擦点边的是 useLocation 这个 api,但是这个返回的是 search 字符串,不是 query 对象,所以解析还得自己来...

    正文

    秉着 nocode 的工程师精神,我立马去 github 上搜了下相关的库,qs 完美符合

    解析 url query 的一些小技巧

    ------------------------------------- 分割线 --------------------------------------------

    正常开发到这可能就结束了,但是由于这个场景出现的太频繁了(几乎每个项目都会需要解析 url query),于是决定探索一下是否有更好的解决方案。

    事情证明它确实存在,那就是: URLSearchParams

    用法如下:

    const querystring = '?template=1'
    // 解析
    const query = new URLSearchParams(querystring);
    // 获取对应的值
    query.get('template');
    

    除了解析 url query 之外,URLSearchParams 还有个很大的使用场景 - 将 query 对象序列化为 url 上的 query 字符串,用法如下:

    const query = new URLSearchParams();
    // 添加值
    query.append('template', 1);
    // 获取序列化后的 query 字符串
    query.toString(); // "template=1"
    

    再往前一步

    前端已经全面进入 ts 时代了,可以通过类型推断来极大的提升开发体验。上面返回的 query 有个小问题, query.get('xxx') 参数可以填任意字符串,开发中容易出现 typo,也不易于后期维护。我们希望的效果应该是下面这样的,调用 query.get() 的时候,智能提示我们有哪些参数可用,并且会在碰到无效参数时报编译错误:解析 url query 的一些小技巧

    直接上代码:

    function parseQuery<T extends Record<string, any>, K = keyof T>(queryStr: string) { 
        const query = new URLSearchParams(queryStr);  
        return {    
            get(name: K) {      
                // @ts-ignore      
                return query.get(name);    
            }  
        }
    }
    
    interface Query {  
        template: string;
    }
    
    const query = parseQuery<Query>('template=1');
    query.get('template'); // √
    query.get('id'); // ×
    

    总结

    1. query 的解析可以直接使用 URLSearchParams

    2. 基于 ts 做一层类型封装,提高开发体验以及降低维护成本


    起源地下载网 » 解析 url query 的一些小技巧

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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