专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
OSC开源社区  ·  Bun ... ·  昨天  
OSC开源社区  ·  RAG市场的2024:随需而变,从狂热到理性 ·  昨天  
程序猿  ·  41岁DeepMind天才科学家去世:长期受 ... ·  昨天  
程序猿  ·  “未来 3 年内,Python 在 AI ... ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

Vue 超快速学习

SegmentFault思否  · 公众号  · 程序员  · 2018-07-25 08:00

正文

我之前一直使用的React,最近到了新公司,需要使用Vue,虽然之前自己写过一些小demo,但是缺乏系统的学习,且之前自己看的vue1.x的内容,好多都过时了,现在补充一下vue2.x的相关知识。

基础知识:

  • vue的生命周期: beforeCreate / created beforeMount / mounted beforeUpdate / updated beforeDestory / destoryed

  • vue常用指令: v - for v - bind (缩写形式 : prop )、 v - on (缩写形式 @click =’ sss ' )、 v - if / v - else / v - else - if v - model v - once v - html v - show ...

  • vue自定义组件: Vue . component (‘ componentName ',{ props:[‘p1’,’p2’], template: ‘

  • {{ p1 }}
  • ' })

  • vue常用实例方法和属性: data / $data methods / $methods $el computed (计算属性)、 $watch $set $event $emit ...

  • 如果需要更新的属性需要缓存,则使用计算属性的方式,否则可以使用 methods 里的方法来更新属性( methods 里的方法每次重新渲染都会执行)

  • 计算属性默认提供了 getter ,你还可以给它设置 setter

  • 当你数据变化是异步或者开销较大时,可以使用 watch 侦听器来响应数据的变化

  • v - bind : class 的值可以是一个对象,可实现类似 react classnames 模块的功能

  • 自定义组件上的 class 会被渲染拼接到 template 的根节点的 class 属性上(自定义组件上可使用 v - bind : class 来做class的判断显示逻辑)

  • v - bind : style 可以用来绑定内联样式,这个内联样式的值可以由一个对象来定义(类似css in js的模式),且可以被定义为数组(多个样式对象)

  • v - bind : style 可以使用多重值的形式:

    : style =“ display :[‘- webkit - box ’,’- ms - flexbox ’, flex ']">

  • v - if / v - else / v - else - if 的时候,可以用key来管理可复用的元素

  • v - if 是’真正’的渲染,它会确保在切换条件过程中条件块内的元素的事件监听器和子组件适时的销毁和重建

  • v - if 是惰性的,初始为假,什么也不做,直到为真的时候才渲染元素

  • v - show 总是渲染元素,只是简单的进行切换

  • v - if 的切换开销大, v - show 则是初始渲染开销大,频繁切换使用 v - show ,运行时经常改变则使用 v - if

  • v - if v - for 一起使用时, v - for 的优先级更高

  • v - for 可遍历数组,第二个参数是索引

  • v - for 可遍历对象,第二个参数是 key ,第三个参数是索引

  • v - for 搭配可减少渲染次数

  • v - for 和自定义组件使用时,需要使用 props 来传递值

  • 尽可能的为遍历子元素加上 key ,获得渲染优化

  • 数组变异方法: push / pop / unshift / shift / splice / sort / reverse 改变原始数组

  • 数组非变异方法: filter / concat / slice 不改变原始数组,总是返回新数组

  • Vue不能检测到数组索引赋值(使用 vm . $set 解决)和修改 length 长度赋值(使用 splice 解决)的情况

  • Vue不能检测对象属性的添加和删除(使用 vm . $set Object . assign )

  • is =“ todo - item 这种属性的写法比较适合DOM模板

  • 事件修饰符,它们可串联使用: . stop . prevent . capture . self . once . passive (尤其适合移动端)

  • . passive 不用同时和 . prevent 使用,后者会被忽略

  • 按键修饰符: . enter . tab . delete . esc . space . up . down . left . right

  • 系统按键修饰符: . ctrl . alt . shift . meta (⌘|⊞|◆) . exact (允许精确控制系统修饰符组合键触发)

  • 鼠标修饰符: . left . right . middle

  • v - model 会忽略表单元素的 value checked selected ,仅仅使用实例中的数据作为数据源

  • 表单事件修饰符: . lazy . number . trim

  • 组件是可复用的vue实例,具有vue实例大多数属性和方法

  • 组件可复用,每个组件有独立的空间

  • 组件上的data必须是一个函数,这样做避免影响了其他组件

  • 通过 Vue . component () 全局注册的组件可在其被注册后的任何通过 new Vue () 创建的实例所使用,包含其组件树中的所有组件

  • 通过插槽 分发内容(其实就是类似于react的children)

  • 动态组件 配合属性 is 来实现

  • 解析DOM模板时需要注意下可能会有不生效的情况,需要使用is来传递组件

Vue组件

  • 全局注册/局部注册

  • 局部注册组件在子组件中不可用

  • 全局注册的行为必须在根Vue实例创建之前发生

  • camelCase 的属性可以在组件中使用 kebab - case

  • 可以以对象的模式指定每一个 props 属性的类型

  • 父级 props 的更新会向下流动,反之则不行

  • 由于JavaScript对象和数组是引用传入的,所以当子组件对props的改变将会影响到父组件

  • props类型校验可以是原生构造对象的中的任意一个,也可以自定义检验类型,通过 instanceof 检查

  • 对于绝大多数特性来说,外部传入的值会替换掉组件内部设置好的值,如input的type属性,但有的属性则是会进行合并,如class

  • inhertAttrs : false 设置不希望根元素继承特性,可以使用 $attrs 属性来设置继承的目标元素

  • v - on 在设置事件监听器时,会把事件名全部转换成小写,推荐始终使用 kebab - case 的事件名

  • v - model 可以使用自定义组件中的 model 属性自定义

  • 父组件模板的所有东西都会在父级作用域内编译,子组件的所有内容都会在子组件作用域内编译

  • 插槽( )/具名插槽( name = “header"> )/作用域插槽( slot / slot - scope )

  • 组件可用来缓存被切换后隐藏的组件的状态

  • $root 访问根实例, $parent 访问父组件实例(不推荐)

  • 父组件访问子组件,使用 $refs 属性来获取设置了 ref 属性的子组件

  • provide 属性允许我们指定要分享给后代组件使用的方法,然后后代组件使用 inject 属性来获得祖先组件分享的方法(依赖注入)

  • 事件侦听器( $emit 派发的事件)

    • v - on 指令侦听

    • $on 侦听一个事件

    • $once 一次性侦听一个事件

    • $off 停止侦听一个事件

  • 慎用递归组件

  • 尽量避免组件的循环引用

  • 优先使用 template 来定义模板,而不是 inline - template

  • $forceUpdate 来强制更新view

  • 组件包含大量静态内容时,可使用 v - once 来标记,缓存静态内容

过渡 & 动画

  • transition 组件控制过渡动画,可以给任何元素和组件添加进入/离开过渡

  • 当插入或删除 transition 中的元素时,vue会做如下处理

    • 自动嗅探元素是否使用了css过渡和动画,适当时机添加/删除类名

    • 元素的钩子函数会在适当时机被调用

    • 元素既没有钩子函数也没有css动画,插入和删除操作在下一帧立即执行(浏览器逐帧动画机制)

  • 过渡的类名

    • v - enter / v - enter - active / v - enter - to

    • v - leave / v - leave - active / v - leave - to

  • css动画用法同css过渡,区别是类名 v - enter 不会在DOM插入后立即删除,而是在 animationend 事件触发时删除

  • 自定义过渡类名,使用以下属性指定:

    • enter - class / enter - active - class / enter - to - class

    • leave - class / leave - active - class / leave - to - class

    • 自定义类名优先级高于普通的类名

  • 使用 typ e属性设置 transition animation 来申明vue使用的动画类型

  • transition 组件上使用 duration 来设置动画执行的时间

  • 可以使用钩子函数

    • beforeEnter / enter / afterEnter / enterCancelled

    • beforeLeave / leave / afterLeave / leaveCancelled

    • 钩子函数使用 v - on 指令绑定

    • 钩子和结合过渡和动画使用,也可以单独使用

    • enter / leave 中,必须使用 done () 来进行回调,否则会同步调用,过渡或动画会立即完成

    • 对于纯使用JavaScript来进行的动画,推荐使用 v - bind : css =“ false 来取消css的检测,减少css的影响

  • 可使用 apear 设置初始渲染的过渡

    • apear / apear - active / apear - to

    • beforeApear / apear / afterApear / apearCancelled

  • 多元素过渡,设置唯一 key







请到「今天看啥」查看全文