Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >前端的小技巧与黑科技(干货)

前端的小技巧与黑科技(干货)

作者头像
饼干_
发布于 2022-09-19 07:15:07
发布于 2022-09-19 07:15:07
57900
代码可运行
举报
运行总次数:0
代码可运行

前言

面试官:你在xx项目中有哪些亮点或是贡献亦或是小技巧?

我:阿巴阿巴

卡!停一下,你是不是也有相同或者类似的经历?实际大部分同学们多数情况下都是在使用vuereact去实现业务代码,跟业务代码打交道比较多,每当面试官一问起,还真是说不出一二,如果常规回答的话显得过于平庸,倘若是有一二处亮点,也能让面试官刮目相看让成功几率也能高出不少,搞不准因为这一答薪资也跟着上升了。

自动导入文件

假如有如下的js文件需要通过index.js暴露出去,常规做法是一个个引入,但若是更多文件呢?

好家伙,你不会还一个个导入吧?如果你的项目中使用webpack打包,那么你可以利用webpack提供的api require.context。(没有的话就用node的api,相对麻烦点)

require.context是什么?

一个webpackapi,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块。

require.context函数接受三个参数

  1. directory {String} -读取文件的路径
  2. useSubdirectories {Boolean} -是否遍历文件的子目录
  3. regExp {RegExp} -匹配文件的正则

语法: require.context(directory, useSubdirectories = false, regExp = /^.//);

那知道他怎么用的,接下来就开始码起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const files = require.context('.', false, /.js$/)
const obj = {}
files.keys().forEach(key => {
    if (key === './index.js') return
    Object.assign(obj, { ...files(key).default })
    
})
export default apiObj

通过.遍历当前目录下所有的js文件,把除index.js之后的文件一起暴露出去再引入index即可。

前端实现搜索功能

前端同学:这不是你后端做的东西吗?我不干。

后端同学:我没时间,你来实现吧!老板加钱!

前端同学:给我五分钟。

以上内容纯属虚构。

言归正传,比如你使用的是vue实现一个搜索如何做?

首先当然要获取用户输入的内容,根据内容来匹配输出内容。

有思路后开始写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div>
        名字:
        <input v-model='keywords'/>
        <ul>
            <li v-for='(item, key) in search(keywords)' :key='key'>{{ item.name }}</li>
        </ul>
    </div>
</template>
<script>
export default {
    data() {
        keywords: '',
        list: [
            { name: '张三', id: 1 },
            { name: '法外狂徒', id: 2}
        ]
    },
    methods: {
        search(key) {
            let newList = []
            this.list.map(item => {
                if(item.name.indexof(key) !== -1){
                    newList.push(item)
                }
            })
            return newList
        }
    }
}
</script>

打开新窗口监听其关闭然后刷新当前页面

产品:我想从这里跳到那里然后回来的时候这里是最新的,晚上火锅。

我:安排。

首先,将window.open打开的新窗口存到一个变量里,该方法会返回一个对象里面包含closed属性代表打开页面是否关闭。之后我们再利用定时器监听该属性是否变化,然后刷新当前页面并销毁定时器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//打开窗口
window.name = "origin";
var windowObjectReference;
var strWindowFeatures = "width=1000,height=500,menubar=yes,location=yes,resizable=yes,scrollbars=true,status=true";
function openRequestedPopup(url) {
    windowObjectReference = window.open(url, "name", strWindowFeatures);
}
//循环监听
var loop = setInterval(() => {
  if(windowObjectReference.closed) {
     clearInterval(loop); //停止定时器
     location.reload(); //刷新当前页面
  }
}, 1000);

监听storage内的数据

你想监听localstorageseesionstorage内的数据?那你为啥不在框架里监听(如在vue中的watch等)?

emm。。。 我也想,但是前辈留下来的记号太多了。没办法,不然直接watchuseEffect都可以直接实现。

行吧,办法总是有的。

首先查阅资料我们了解到StorageEvent

当前页面使用的storage被其他页面修改时会触发StorageEvent事件。

事件在同一个域下的不同页面之间触发,即在A页面注册了storge的监听处理,只有在跟A同域名下的B页面操作storage对象,A页面才会被触发storage事件。

之后通过initStorageEven来初始化一个storage对象,再派发该对象即可。

通过查阅MDN得知参数。

比如监听sessionStorage:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setStorage(key, val) {
    if(key === 'watch') {
        // 创建一个事件
        var storageEvent = document.createEvent('storageEvent')
    }
    const storage = {
        setItem: (itKey, itVal) => {
            sessionStorage.setItem(itKey, itVal)
            // 初始化事件
            storageEvent.initStorageEvent('setItem', false, false, itKey, null, itVal, null, null)
            // 派发对象
            window.dispatchEvent(storageEvent)
        }
    }
    return storage.setItem(key, val)
}

使用方法: 在A页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setStorage('watch', val)

在B页面即可获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.addEventListener('setItem', () => {
    newVal = sessionStorage.getItem('watch')
})

事件在同一个域下的不同页面之间触发,即在A页面注册了storge的监听处理,只有在跟A同域名下的B页面操作storage对象,A页面才会被触发storage事件。

最后

都看到这里了不点个赞吗?

欢迎大佬们提出建议与想法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小技巧之require.context的使用
01 前 言 在项目开发中,经常需要import或者export各种模块 经常会这样引入组件: import A from 'components/A' import B from 'componen
用户9914333
2022/07/22
5770
小技巧之require.context的使用
vue 实践记录
使用:const files = require.context(directory, useSubdirectories, regExp)
易墨
2018/09/14
5290
vue 实践记录
Webpack require.context() 前端工程化之动态导入文件
随着项目越来越大,业务需要越来越多,我们项目的目录层级也是非常的多。如果还是通过import分别引入文件,那是非常的不科学的。
Javanx
2019/09/04
2.3K0
Webpack require.context() 前端工程化之动态导入文件
Vue3项目配置Mock模拟接口数据
当一个项目开始开发,正常情况是前后台开发同时进行,但是很多情况是后台先提供接口,然后前端才开始编写页面,这样就会导致项目进度缓慢,为了解决这个问题,前端一般是根据接口先在本地进行数据模拟请求,本次我们使用Mockjs,实现在基于Vue3项目的数据模拟。
青年码农
2021/01/05
6.3K1
10个Vue开发技巧助力成为更好的工程师(二)
更新 prop 在业务中是很常见的需求,但在子组件中不允许直接修改 prop,因为这种做法不符合单向数据流的原则,在开发模式下还会报出警告。因此大多数人会通过 $emit 触发自定义事件,在父组件中接收该事件的传值来更新 prop。
WahFung
2020/08/24
1.1K0
【云+社区年度征文】一篇文章带你了解JavaScript Storage接口
Storage 接口用于脚本在浏览器保存数据。两个对象部署了这个接口:window.sessionStorage和window.localStorage。
前端皮皮
2020/11/25
3630
【云+社区年度征文】一篇文章带你了解JavaScript Storage接口
使用require.context,实现去路由中心化管理
它允许您传入一个目录进行搜索,一个标志表示是否也应该搜索子目录,以及一个正则表达式来匹配文件。
Peter谭金杰
2020/04/15
1.1K0
使用require.context,实现去路由中心化管理
前端路由那些事
假设你浏览器访问的url地址是 http://127.0.0.1/#/test 那么通过 location.hash 获取的hash值为 #/test
树酱
2020/07/03
1K0
前端路由那些事
绝对干货~!学会这些Vue小技巧,可以早点下班和女神约会了
每天都在写代码,虽然手底下马不停蹄的敲,但是该来的加班还是会来的,如何能更快的完成手头的工作,提高自己的开发效率,今天小编给大家带来了这几个Vue小技巧,终于可以在六点像小鹿一样奔跑着下班了。
前端进击者
2021/07/27
1.2K0
《前端那些事》从0到1开发工具库
在日常开发中,特别是中后台管理页面,会经常使用到一些常用的函数比如:防抖节流、本地存储相关、时间格式化等,但是随着项目不断增加,复用性和通用性就成为一个很至关重要的问题,如何减少复制张贴的操作,那就是封装成为,适用与多项目统一的工具包,并用npm进行管理,“U盘式安装”的方式可以提高团队的效率,那今天就讲讲开发一个简易的工具库需要涉及哪些环节,看下图
树酱
2020/07/03
2K0
《前端那些事》从0到1开发工具库
加快 Vue 项目的开发速度
Webpack是实现我们前端项目工程化的基础,但其实她的用处远不仅仅如此,我们可以通过Webpack来帮我们做一些自动化的事情。首先我们要了解require.context()这个API
grain先森
2019/03/29
7330
加快 Vue 项目的开发速度
通过webpack的require.context,去路由中心化管理
它允许您传入一个目录进行搜索,一个标志表示是否也应该搜索子目录,以及一个正则表达式来匹配文件。
Peter谭金杰
2020/05/09
1.1K0
通过webpack的require.context,去路由中心化管理
一篇文章带你了解JavaScript的Storage接口
Storage 接口用于脚本在浏览器保存数据。两个对象部署了这个接口:window.sessionStorage和window.localStorage。
前端进阶者
2021/07/22
5390
Vue 开发必须知道的 36 个技巧【近1W字】
Vue 3.x 的Pre-Alpha 版本。后面应该还会有 Alpha、Beta 等版本,预计至少要等到 2020 年第一季度才有可能发布 3.0 正式版; 所以应该趁还没出来加紧打好 Vue2.x 的基础; Vue基本用法很容易上手,但是有很多优化的写法你就不一定知道了,本文从列举了 36 个 vue 开发技巧; 后续 Vue 3.x 出来后持续更新.
火狼1
2019/10/09
1.2K0
vue 引入公共组件之 require.context
我们项目开发中,经常需要import或者export各种模块,那么有没有什么办法可以简化这种引入或者导出操作呢?答案是肯定的,下面就为大家介绍一下require.context
小蔚
2021/08/10
1.2K0
vite基本配置教程
最近做项目要求将webpack打包方式换成vite,下面将详细讲解一下配置vite需要修改哪些文件,以及过程中踩到的奇葩坑。
程序媛夏天
2024/01/18
5740
vite基本配置教程
记录前端工作中获得的经验(七)
大家,好久没更新了,因为之前过年放假,一直犯懒,最近工作上也没什么让我干的事,比较清闲,所以没什么可以写的,每天就看看项目什么的,了解公司的业务,但是这些东西也不能发hhh没什么可发的
y191024
2024/03/07
1030
记录前端工作中获得的经验(七)
前端开发--记录VUE中监听sessionStorage变化
前段时间项目上有个需求,在菜单栏进行切换应用的时候,页面的数据要进行刷新。如下图所示:
玖柒的小窝
2021/11/08
2.2K0
「前端工程化」从0-1搭建react,ts脚手架(自动化收集,进程通信,深拷贝文件等全流程)
①node实现终端命令行 ②终端命令行交互 ③深copy整个文件夹 ④nodejs执行终端命令 如 npm install ⑤建立子进程通信 ⑥webpack底层操作,启动webpack,合并配置项 ⑦编写一个plugin,理解各阶段 ⑧require.context实现前端自动化
用户6835371
2021/06/01
1.8K0
「前端工程化」从0-1搭建react,ts脚手架(自动化收集,进程通信,深拷贝文件等全流程)
实战:Webpack 的 require 动态变量
方式1:网上说是在webpack 中加入下面代码,重新启动就会好使,但是我加了之后,并没有起多大的作用,也可能是我的配置的问题,参考地址:在这里,下面为webpack.config.js的配置
White feathe
2021/12/08
1.7K0
推荐阅读
相关推荐
小技巧之require.context的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验