受控组件
由外部控制的组件叫做受控组件
headless component
组件由逻辑+UI组成,headless compoent是只有逻辑而没有UI的组件。
好处是节省UI代码体积,方便使用者自定义样式。
v-for的key不使用index
key作为元素的唯一标识,使用数组索引作为key,当向数组插入或删除元素时,可能会导致数据不更新,因为vue采用了原地更新策略
Blog
demo
+和~选择器
+:选择后面的紧邻兄弟元素
~:选择之后的所有兄弟元素
跨域解决方案
- JSONP
- CORS:Acces-Control-Allow-Orgin: *
- proxy:
- 开发阶段:webpack-dev-server
- 生产环境:nginx
CSS实现长宽比固定矩形
- padding-bottom设置百分数,但是不能放内容
- 新属性:aspect-ratio: 1/2
伪类选择器有哪些?
::before ::after
::selection
:选中内容时,如设置选中文字的样式
prefetch和preload区别
<link rel="prefetch" href="style.css" as="style" />
<link rel="preload" href="main.js" as="script" />
- preload 加载当前路由必需资源,优先级高。一般对于 Bundle Spliting 资源与 Code Spliting 资源做 preload
- prefetch 优先级低,在浏览器 idle 状态时加载资源。一般用以加载其它路由资源,如当页面出现 Link,可 prefetch 当前 Link 的路由资源。(next.js 默认会对 link 做懒加载+prefetch,即当某条 Link 出现页面中,即自动 prefetch 该 Link 指向的路由资源
浏览器如何禁止复制?
- user-select: none;禁止选中
- 监听dom元素的copy事件
package.json
main: import 文件时去该字段查找
exports: 为不同环境暴露包模块
version: semver规范
{
"name": "my-awesome-lib",
…
"exports": {
".": {
"browser": {
"default": "./lib/whole-lib.browser.js"
}
},
"module-a": {
"import": "./lib/public-module-a.mjs",
"require": "./lib/public-module-a.cjs"
},
"module-b": {
"import": "./lib/public-module-b.mjs",
"require": "./lib/public-module-b.cjs"
}
}
}
// CommonJS flavor
const moduleA = require('my-awesome-lib/module-a')
// ESModule flavor
import moduleA from 'my-awesome-lib/module-a'
// 行不通的!
const moduleA = require('my-awesome-lib/lib/public-module-a')
const moduleC = require('my-awesome-lib/internals/private-module-c')
import moduleA from 'my-awesome-lib/lib/public-module-a'
import moduleC from 'my-awesome-lib/internals/private-module-c'
version/semver规范
- ^1.2.3:第一个版本号保持不变,后面两个版本号保持最新
- ~1.2.3:前面两个版本号不变,后面一个保持最新
peerDependencies
指定使用该包时必须要有的依赖,例如Element-Plus给Vue作为组件库,那么使用Element-Plus就必须要有Vue这个环境。
如何提升webpack构建速度
- 开启cache:webpack5支持
- thread-loader多线程
- 使用一些快的loader,如swc-loader替代babel-loader
压缩JS体积
- terser-webpack-plugin
- 去除空格
- 变量名缩短
- 预计算
Vite处理CJS
转为ESM,不过也不是所有多可以转,毕竟require是一个函数,还会有default问题
转换后也可以做一些treeshaking操作。
JSON 可以treeshaking吗?
如在一个文件中导入一个JSON。
可以做到,因为JSON就是简单键值对,可以把没用到的键值去除
204/206
204: no content
206: particial content