grid 布局和flex布局的 选择问题.
grid 布局和 flex 布局 有各自的应用场景
要考虑是一纬布局还是二维布局(横向排列和竖向排列都要考虑)
一维布局用felx
而维用 grid
是从内容出发还是从布局出发
从内容出发: 内容不确定,希望有规律的分布在容器中
从布局出发: 整体架构已经确定, 填元素即可
总结: 整体青睐grid,局部用flex.
手写 miniVue - 03_导出外部实例
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
手写 miniVue - 02_响应式
02_vue2_reactive
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869class Watcher { static _effect = null static WatchEffect(effect) { Watcher._effect = effect effect() Watcher._effect = null }}/** * * * @class Dep */class Dep { constructor() { this.watchers = new Set() } depend() { this.watchers.add(Watcher._effect) } notify() { this.watchers.forEach(watcher => ...
手写 miniVue - 01_渲染实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160function h(tag, props, children) { // js obj -> vnode if ([...arguments].length === 1 && typeof arguments[0] === ...
interview react
setState 异步和同步
setState 其实无所谓异步同步,如果命中batchingUpdates 就是同步,否则是异步
那些能命中batchUpdate机
生命周期 和它调用的函数
React 中注册的事件 和它调用的函数
React可以管理的入口
react hooks 解决了什么问题,为什么会有这个
class 逻辑分散,存在性能浪费
class 复杂组件不易拆解,不易测试
完善函数组件的能力,符合react 函数式编程的思想
组件逻辑复用时,hooks 逻辑更清晰
hooks 如何模拟生命周期
useEffect
如何自定义
uesXxx
hooks 性能优化
useMemo
useCallback
hooks 遇到那些坑
只能用于顶层代码,不能有循环之类的
useState 只初始化一次
useEffect 内部不能修改state
useEffect 依赖引用类型会出现死循环
hooks 比 hoc render props 优点在哪里
符合逻辑
变量作用域明确
不会产生组件嵌套
interview webpack
前端代码为何要进行构建和打包
module chunk bundle 分别是什么意思,有何区别
module 各个源码文件,webpack中一切皆模块
chunk 多模块合并成的,如 entry。impor() splitChunk
bundle 最终的输出文件,可以有多个
loader 和 plugin 的区别
webpack 如何实现懒加载
webpack 常见性能优化
构建速度
优化babel-loader : 开启缓存,添加include或exclude 明确范围
ignorePlugin
noParse
happyPack
prallelUglifyPlugin
自动刷新 - 热更新-自动刷新升级版
dllPlugin
babel-runtime 和 babel-polyfill 的区别
runtime 不会污染全局环境 - babel-polyfill 最新webpack中使用core.js 替代-还有generator.js
interview vue3
Vue3 比 vue2 有什么优势
描述vue3生命周期
如何看待composition API 和 Options API
如何理解 ref toRef toRefs
Vue3 升级哪些重要功能
createApp
use 等原来需要用Vue来调用,现在使用app实例
emits 属性
生命周期
多事件
可以给事件绑定多个会掉,用逗号隔开
fragment
template 不再 需要包裹单一父节点
移除.sync
移除异步组件的写法
Vue2 直接通过函数返回import(‘’componentPath.vue)
Vue3 需要使用defineAsyncComponent 来包裹vue2 的写法
基础filter
Teleport
Suspense
Composition API
reactive ref相关函数 readonly watch watchEffect setup 生命周期钩子
Composition API 如何实现代码逻辑复用
Vue3 如何实现响应式
watch watchEffect 区别是什么
...
interview vue 题目
Vue 组件如何通讯
父子组件props 和 this.$emit
自定义事件event.$no event.$off event.$emit
Vex
Vue 组件生命周期(父子组件)
12345678加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted子组件更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated父组件更新过程 父beforeUpdate->父updated销毁过程 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
描述组件渲染和更新的过程
v-model的实现原理
input元素的value=this.name
绑定input事件this.name = $event.target.value
data ...
面试 一面 js 基础面题目
typeof 能判断哪些类型
识别所有值类型
识别函数
判断是否为引用类型(不可再发)
何时使用=== 何时使用==
值类型和应用类型的区别
手写深浅拷贝
1234567891011121314151617const deepClone = (obj = {}) => { if (typeof obj !== 'object' || obj == null) { return obj } let res if (obj instanceof Array) { res = [] } else { res = {} } for (const key in obj) { if (Object.hasOwnProperty.call(obj, key)) { res[key] = deepClone(obj[key]) } } return res}
如何准确判断一个变量是不是数组
...
手写 防抖 debounce
123456789101112const useDebounce = (fn) => { let timer = null; return () => { clearTimeout(timer); timer = setTimeout( ()=>{ fn(); clearTimeout(timer); } ,1000); }}