24
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

来るべきVue3.0に備える

Last updated at Posted at 2019-07-01
1 / 16

v-sendai #2での発表内容です

自己紹介

tanshio(@_tanshio)

フロントエンドエンジニア、ウェブデザイナー
好きなものはVue・Nuxt、TypeScript、WebGLです
いま挑戦中のものはRustです
VTuberが好きです


基本的には、https://github.com/vuejs/rfcs に書いている情報になります。


Class APIの破棄

クラスベースのAPIが提案されていましたが、破棄されました。


<template>
  <div @click="increment">
    {{ count }} {{ plusOne }}
    <Foo />
  </div>
</template>

<script>
import Vue from 'vue'
import Foo from './Foo.vue'

export default class App extends Vue {
  static components = {
    Foo
  }

  count = 0

  created() {
    console.log(this.count)
  }

  get plusOne() {
    return this.count + 1
  }

  increment() {
    this.count++
  }
}
</script>

僕的にはシンプルかつ継承などもしやすいので残念。
rfcsのVuexがこれベースっぽかったので今後注目。


Function-based Component API



import {
  value,
  computed,
  watch,
  onMounted,
  inject
} from 'vue'

const App = {
  // same as before
  props: {
    a: String,
    b: Number
  },

  // same as before
  components: {
    // ...
  },

  setup(props) {
    // data
    const count = value(1)

    // computed
    const plusOne = computed(() => count.value + 1)

    // methods
    function inc() {
      count.value++
    }

    // watch
    watch(() => props.b + count.value, val => {
      console.log('changed: ', val)
    })

    // lifecycle
    onMounted(() => {
      console.log('mounted!')
    })

    // dependency injection
    const injected = inject(SomeSymbol)

    // other options like el, extends and mixins are no longer necessary

    // expose bindings on render context
    // any value containers will be unwrapped when exposed
    // any non-containers will be exposed as-is, including functions
    return {
      count,
      plusOne,
      inc,
      injected
    }
  },

  // template: `same as before`,

  render({ state, props, slots }) {
    // `this` points to the render context and works same as before (exposes everything)
    // `state` exposes bindings returned from `setup()` (with value wrappers unwrapped)
  }
}


React Hooksのようなイメージ。


今からでも使える
https://github.com/vuejs/vue-function-api


  • setup
  • value
    • プリミティブ型で使う
  • state
    • 配列やオブジェクトなど。(Vue.observable)
  • computed
  • watch

ポータルが来る

body直下などにVueコンポーネントがおけるようになる

  • モーダル・トーストの管理が非常に楽になる

image.png

z-indexでの管理が楽になる


Nuxtはどうなる?

VueFes 2018の質疑応答の限りでは、Vue 3.0がリリースされ次第早めに対応したNuxtもリリースしたいとのこと。


準備しておく


非推奨、動作が変わるものを見直す

  • slot
    • slot-scopeが非推奨に
    • v-slotを使う
  • Vue.observable
    • 参照ではなくなるので、使っている場合は注意

バージョンアップはきついか?

V1→V2がそこまでつらくなかったので大丈夫だと思いたい

TypeScriptをやろう

Vue 3.0ではTypeScriptが全面的にサポートされる(はず)なので、今のうちにTypeScriptに慣れておこう。
コンポーネントのpropsがエディタ上で補完出るようになってほしい…(Reactではできるので)

まとめ

  • Function-based Component APIがくるぞ!
  • TypeScriptをやろう

ありがとうございました

24
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?