泛型:
工程中,我们不仅要创建一致的定义良好的API也要考虑重用性。组件不仅能支持未来的数据类型,也能支持未来的数据类型。
泛型就是用来创建可重用的组件,一个组件可以支持多种类型的数据。
function getData(value: T):T{
return value;
}
getData(123);
getData('21231');
接口:
在TypeScript里,接口的作用就是为这些类型命名和为代码定义契约。
TypeScript就是一个基于类的面向对象编程语言。类的继承,重写。接口,泛型,命名空间
TypeScript 面向对象编程
typescript提供了一套强类型的规范。便于模块管理,团队协作,开发严谨且自由。静态类型检查,IDE只能提示,代码重构可读性高。
typescript史上最强学习入门文章
使用 Typescript 检查你的代码规范
vue项目使用typescript开发
TypeScript 在 React 中使用总结
主要区别:
1.模板 vs JSX
2.状态管理 vs 对象属性
Vue与React两个框架的区别和优势对比
个人理解Vue和React区别
特点:
setState是同步执行的,但state不一定会同步更新;
setState在React生命周期合成事件中批量覆盖执行
setState在原生事件,setTimeout、Promise等异步操作中,state会同步更新
基本过程:setState的调用会引起React的更新生命周期的4个函数执行。
shouldComponentUpdate
componentWillUpdate
render
componentDidUpdate
当shouldComponentUpdate执行时,返回true,进行下一步,this.state没有被更新
返回false,停止,更新this.state
当componentWillUpdate被调用时,this.state也没有被更新
直到render被调用时候,this.state才被更新
因为组件中的某些属性是和视图没有关系的,当组件变得复杂的时候可能会出现各种各样的状态需要管理,这时候用setState管理所有状态是不可取的。state中本应该只保存与渲染有关的状态,而与渲染无关的状态尽量不放在state中管理,可以直接保存为组件实例的属性,这样在属性改变的时候,不会触发渲染,避免浪费
事件合成:形成namesToPlugins、registrationNameModules等几个重要对象,构建初始化React合成事件和对应的事件处理插件关系
事件绑定:根据合成事件类型,找到对应原生事件的类型,调用 addTrappedEventListener 进行真正的事件绑定,绑定在document
上(react17绑定在container上),dispatchEvent
为统一的事件处理函数
事件触发:通过统一的事件处理函数 dispatchEvent
,进行批量更新batchUpdate。
一文吃透 react 事件系统原理
React
会先将你的代码转换成一个JavaScript
对象,然后这个JavaScript
对象再转换成真实DOM
。这个JavaScript
对象就是所谓的虚拟DOM
。
深入分析虚拟DOM的渲染原理和特性
有react fiber,为什么不需要vue fiber呢?
React Fiber
「React进阶」react-router v6 通关指南
Mixin的缺陷:
组件与 Mixin 之间存在隐式依赖(Mixin 经常依赖组件的特定方法,但在定义组件时并不知道这种依赖关系)
多个 Mixin 之间可能产生冲突(比如定义了相同的state字段)
Mixin 倾向于增加更多状态,这降低了应用的可预测性(The more state in your application, the harder it is to reason about it.),导致复杂度剧增
隐式依赖导致依赖关系不透明,维护成本和理解成本迅速攀升:
难以快速理解组件行为,需要全盘了解所有依赖 Mixin 的扩展行为,及其之间的相互影响
组价自身的方法和state字段不敢轻易删改,因为难以确定有没有 Mixin 依赖它
Mixin 也难以维护,因为 Mixin 逻辑最后会被打平合并到一起,很难搞清楚一个 Mixin 的输入输出
HOC相比Mixin的优势:
HOC的缺陷:
Render Props优点:
Render Props缺陷:
React Hooks优点:
React Hooks缺陷:
额外的学习成本(Functional Component 与 Class Component 之间的困惑)
写法上有限制(不能出现在条件、循环中),并且写法限制增加了重构成本
破坏了PureComponent、React.memo浅比较的性能优化效果(为了取最新的props和state,每次render()都要重新创建事件处函数)
在闭包场景可能会引用到旧的state、props值
内部实现上不直观(依赖一份可变的全局状态,不再那么“纯”)
React.memo并不能完全替代shouldComponentUpdate(因为拿不到 state change,只针对 props change)
手写简易版 React
VUE.js API
MVVM框架理解
双向绑定原理:Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更新。
通俗易懂了解Vue双向绑定原理及实现
Diff算法:修改dom时只修改一小块,不更新整个dom进行整个dom树的重绘。根据真实DOM生成一个vietual DOM。
详解vue的diff算法
Vue定义了四种事件监听的API:$on、$once、$off、$emit
Vue源码解读之事件机制
template => DOM在Vue构建过程中的$mount过程开始的,template先是被编译成render function,再被渲染成真实DOM。被编译的过程:
第一步,parse解析成ast树
第二步,对ast树进行optimize,检测出其中不需要进行改变的DOM静态子树(可在后续渲染真实DOM过程中petch跳过,减少使用diff算法的工作量)
最后,generate成所需的code,将ast语法树转化成render function字符串。
从template到DOM(Vue.js源码角度看内部运行机制)
单页面Web应用(single-page application,SPA):
仅在web页面初始化时加载相应的HTML、JS、CSS,一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转,而是利用JS动态的变换HTML,从而实现UI与用户的交互。
优缺点:
1、优点:避免了页面的重新加载,SPA可以提供较为流畅的用户体验,实现无跳转刷新。由于浏览器的history机制,用hash的变化从而推动页面变化。
2、缺点:以SPA方式开发的网站不容易管理也不够安全。由于没有一页一页的网页给搜索引擎的爬虫去爬,所以在搜索引擎最佳化SEO的工作上需花费额外功夫。
浅谈单页Web应用(SPA):工作原理及优缺点
viewport就是视区窗口,也就是浏览器中显示网页的部分。PC 端上基本等于设备显示区域,但在移动端上 viewport
会超出设备的显示区域(即会有横向滚动条出现)。
设备默认的viewport在980 - 1024 之间。viewport 实在 meta标签内进行控制
设置 | 解释 |
width | 设置layout viewport的宽度,为一个正整数或字符串“width-device” |
initial-scale | 设置页面的初始缩放值,为一个数字,可以带小数 |
minimum-scale | 允许用户的最小缩放值,为一个数字,可以带小数 |
maximum-scale | 允许用户的最大缩放值,为一个数字,可以带小数 |
height | 设置 layout viewport 的高度,这个属性对我们并不重要,很少使用 |
user-scalable | 是否允许用户进行缩放,值为"no"或"yes", no 代表不允许,yes 代表允许 |
移动前端开发之viewport的深入理解
默认情况下: 1em = 10px; 1rem = 16px
px: 绝对固定的值,无论页面放大或者缩小都不会改变。
em: 相对父元素字体大小的倍数。如果父元素的字体为 12px
,那么子元素 1em
就是 24px
。由于是相对父级的倍数,所以多层嵌套时,倍数关系的计算会很头痛。
rem: 相对根元素字体大小的倍数。相对于 html
的字体大小,如果不做任何修改,浏览器默认字体大小为 16px
。
ppi:每英寸像素数,该值越高,则屏幕越细腻
dpi:每英寸多少个点,该值越高,则图片越细腻
dp:安卓开发用的长度,1dp表示在屏幕像素点密度为160ppi时1px长度
1、固定高度,宽度自适应。水平方向使用弹性布局,元素采用定值、百分比、flex布局等
2、固定布局视口宽度,使用viewport进行缩放
3、根据不同屏幕动态写入font-size,以rem作为宽度单位,固定布局视口
4、以rem作为宽度单位,动态写入viewport和font-size进行缩放
5、根据不同屏幕动态写入font-size和viewport,以热门作为宽度单位
移动端页面适配———多方案解析
Electron是又github开发,用HTML、CSS、JS来构建跨平台桌面应用程序的一个开源库。可以看作一个Node.js的变体。
Electron 结合了 Chromium、Node.js 和用于调用操作系统本地功能的API。
指南:开始使用 Electron
使用Vue开发微信小程序:mpvue框架
uni-app
Vue开发小程序之性能优化
一篇文章总结redux、react-redux、redux-saga
Mobx特别容易入门级教程
你需要Mobx还是Redux?
Vuex 是什么?
所以无论是技术栈还是框架。类库,并没有绝对的比较我们就应该选择什么,抛弃什么,我们应该更关注它们解决什么问题,它们解决问题的关注点,或者说实现方式是什么,它们的优缺点还有什么,哪一个更适合当前项目,以及项目未来发展
ElementUI、layui、Mint UI
ECharts
ECharts使用的是ZRender底层渲染器。ZRender提供三种渲染器:Canvas、SVG和VML。它对上提供了一种渲染平台无关的图形接口,对下封装兼容不同平台的实现算法。
WebGL
Lodash
Chrome浏览器调试器为例:前端chrome浏览器调试总结
Charles网络抓包工具使用教程
charls抓取https设置(手机端)
安装vue-devtools
教你使用Vue.js的DevTools来调试你的vue项目