vue 笔记

各种类库awesome-vue

现代化工具链

对比其它框架

过渡效果

JSX语法

指令:

v-bind

v-on

v-model

v-html

生命周期:

不要在选项属性或回调上使用箭头函数, 比如

模板语法 vs JSX 语法

在模板中放入太多的逻辑会让模板过重且难以维护

计算属性缓存 vs 方法

计算属性是基于它们的依赖进行缓存的, 计算属性只有在它的相关依赖发生改变时才会重新求值.相比之下, 每当触发重新渲染时, 调用方法将总会再次执行函数.

指令配合计算属性很强大

当在一个自定义组件上使用 class 属性时, 这些类将添加到该组件的根元素上,不会覆盖之前的

vue 的 :style 会自动添加前缀

Truthy vs falsy

false, 0, '', null, undefined, NaN

v-if 中碰到相同的元素,用 key 来管理

v-show 不支持 <template> 元素,也不支持 v-else

v-for 在遍历的时候,是按 Object.keys() 的结果遍历,但是不能保证它的结果在不同的 JavaScript 引擎下是一致的

数组更新监测

变异方法( 改变了原来的数组 )

push, pop, shift, unshift, splice, sort, reverse,

非变异( 返回新数组 ),非常常用

filter, concat, slice

由于 JS 的限制,监测不到变动:

利用索引

解决方式:Vue.set(example1.items, indexOfItem, newValue)

或者:example1.items.splice(indexOfItem, 1, newValue)

修改数组的长度

解决方式: example1.items.splice(newLength)

对象属性的添加和删除

解决方式:Vue.set(vm.obj, 'key', 123)

或者:this.userProfile = Object.assign({}, this.userProfile, { age: 27 })

v-for 和 v-if 处于同一节点,v-for 的优先级更高

在使用 ul - li 且 li 打算用组件,请使用 is="component",.vue 的组件不受影响

因为 ul 内只有 li 是合法的

事件修饰符:

.stop .prevent .capture .self

.once可以被用到自定义的组件事件上

不应该在子组件改变 prop,如果非要改变:

props: ['initialCounter'],
data: function () {
  return { counter: this.initialCounter }
}

或者

props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}

注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。

组件

可以认为组件是自定义元素

所有的 vue 组件同时也都是 Vue 的 实例,可以接受相同的选项对象

全局注册

Vue.component('my-component', {})

单向数据流

一个原则不要更改传入的 prop,如果非要更改:

使用 data 初始化,或者 计算属性

另外尽量减少传入对象或数组的 prop

.sync 用来弥补子组件不能改变父组件状态的语法糖

<comp :foo.sync="bar"></comp>

// 扩展
<comp :foo="bar" @update:foo="val => bar = val"></comp>
// 需要更新的时候子组件调用
this.$emit('update:foo', newValue)

非父子组件的通信

var bus = new Vue()

// 触发组件 A 中的事件
bus.$emit('id-selected', 1)

// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
  // ...
})

变异作用域

// 无效
<child-component v-show="someChildProperty"></child-component>

https://cn.vuejs.org/v2/guide/components.html#单个插槽

Keep-alive 避免动态组件重复渲染

$refs 只在组件渲染完成后才填充,并且它是非响应式的。它仅仅是一个直接操作子组件的应急方案——应当避免在模板或计算属性中使用 $refs。

动画

单元素/组件的过渡

transition 组件中的元素时,三个步骤:

  1. 自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名。
  2. 如果过渡组件提供了 JavaScript 钩子函数,这些钩子函数将在恰当的时机被调用
  3. 如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作 (插入/删除) 在下一帧中立即执行。

CSS 过渡类名:

v-enter, v-enter-active, v-enter-to

v-leave, v-leave-active, v-leave-to

transition:

一个进入/离开的过渡中:第一帧出现 v-enter 和 v-enter-active,然后下一帧移除 v-enter,v-enter-to 生效,在执行完所有动画后移除 v-enter-to 和 v-enter-active,一般情况下在 v-enter-active 中写入过渡时间,延迟和曲线函数等

animation:

CSS 动画用法同 CSS 过渡,区别是在动画中 v-enter 类名在节点插入 DOM 后不会立即删除

过渡模式

In-out out-in

多个组件的过渡

列表过渡

v-move: 它会在元素的改变定位的过程中应用。

可复用的过渡

函数组件更适合完成这个任务

Vue.component('my-special-transition', {
  functional: true,
  render: function (createElement, context) {
    var data = {
      props: {
        name: 'very-special-transition',
        mode: 'out-in'
      },
      on: {
        beforeEnter: function (el) {
          // ...
        },
        afterEnter: function (el) {
          // ...
        }
      }
    }
    return createElement('transition', data, context.children)
  }
})
上次更新: 6/5/2020, 3:22:23 AM