Vue 3でのグローバルApiからアプリケーションインスタンスへの変更
4204 ワード
VueグローバルApiが適用インスタンスに変更されました
Vue 2のグローバルApi
vue 2のグローバルApiはvueの挙動をグローバルに変えることができ,この操作は他の試験例を意外に汚染しやすい.
グローバル構成では、同じページ上の複数のapp間でVueコピーを共有することは非常に困難です.
Vue 3の新しいグローバルApi:createApp
createAppはアプリケーションのインスタンスを返します.
Vue 3におけるコントラストVue 2グローバルApiの変化
2.xグローバルApi
3.xインスタンス(app)Api
Vue.cofing
app.config
Vue.config.productionTip
*削除
Vue.config.ignoredElements
* app.config.isCustomElement
Vue.component
app.component
Vue.directive
app.directive
Vue.mixin
app.mixin
Vue.use
* app.use
Vue.prototype
* app.config.globalProperties
他のすべての非グローバルな動作を変更するグローバルApiは、exportsと命名されました.
config.productionTip除去
Vue 3.xでは、「本番バージョンの使用」プロンプトは、「dev+full build」(ランタイムコンパイラと警告付きコンストラクションを含む)を使用する場合にのみ表示されます.
ESモジュール構築では、bundlerとともに使用されているため、CLIまたはテンプレートが本番環境を正しく構成している場合が多いため、このテクニックは使用されません.
config.ignoredElementsをconfigに置き換える.isCustomElement
この構成項目を導入したのは、オリジナルのカスタム要素をサポートするためで、名前の変更によってその機能がよりよく伝わり、新しいオプションにはString/RegExpを使用するよりも柔軟な関数が必要です.
Vue.prototypeをconfigに置き換える.globalProperties
Vue 2では、Vue.prototypeは通常、すべてのコンポーネントがアクセスできるpropertyをVue 3でconfigと同等に追加する.globalPropertiesこれらのpropertyは、インスタンス化コンポーネントの一部としてアプリケーションにコピーされます.
プラグインの使用
プラグイン開発者は通常vueを使用する.use、例えば公式のvue-routerがブラウザ環境でどのように自分でインストールされているか
現在useグローバルApiは使用されていませんので、このプラグインの使用を手動で指定する必要があります.
Appインスタンスのマウント
createAppを使用する初期化後、アプリケーションインスタンスappはappを使用することができる.mount(domTarget)はコンポーネントインスタンスに掛けられており、以上の変更により、完全な書き方は以下のコードに書き換えられます.
Provide/inject
と2.xは、インスタンスでprovideオプションを使用するのと同様に、Vue 3アプリケーションインスタンスは、アプリケーション内の任意のコンポーネントによって注入される依存性を提供することもできる.
アプリケーション間の共有構成
コンポーネントや命令などの構成をアプリケーション間で共有する方法の1つとして、コンポーネントファクトリを作成するには、次の手順に従います.
Vue 2のグローバルApi
vue 2のグローバルApiはvueの挙動をグローバルに変えることができ,この操作は他の試験例を意外に汚染しやすい.
import { createLocalVue, mount } from '@vue/test-utils'
// vue
const localVue = createLocalVue()
// `local`Vue
localVue.use(Myplugin)
// localVue
mount(Component, { localVue })
グローバル構成では、同じページ上の複数のapp間でVueコピーを共有することは非常に困難です.
// mixin
Vue.mixin({
/* ... */
})
const app1 = new Vue({ el: '#app1' })
const app2 = new Vue({ el: '#app2' })
Vue 3の新しいグローバルApi:createApp
createAppはアプリケーションのインスタンスを返します.
import { createApp } from 'vue'
const app = createApp({})
// Vue CDN, createApp Vue
const { createApp } = Vue
const app = createApp({})
Vue 3におけるコントラストVue 2グローバルApiの変化
2.xグローバルApi
3.xインスタンス(app)Api
Vue.cofing
app.config
Vue.config.productionTip
*削除
Vue.config.ignoredElements
* app.config.isCustomElement
Vue.component
app.component
Vue.directive
app.directive
Vue.mixin
app.mixin
Vue.use
* app.use
Vue.prototype
* app.config.globalProperties
他のすべての非グローバルな動作を変更するグローバルApiは、exportsと命名されました.
config.productionTip除去
Vue 3.xでは、「本番バージョンの使用」プロンプトは、「dev+full build」(ランタイムコンパイラと警告付きコンストラクションを含む)を使用する場合にのみ表示されます.
ESモジュール構築では、bundlerとともに使用されているため、CLIまたはテンプレートが本番環境を正しく構成している場合が多いため、このテクニックは使用されません.
config.ignoredElementsをconfigに置き換える.isCustomElement
この構成項目を導入したのは、オリジナルのカスタム要素をサポートするためで、名前の変更によってその機能がよりよく伝わり、新しいオプションにはString/RegExpを使用するよりも柔軟な関数が必要です.
// 2.x
Vue.config.ignoredElements = ['my-el', /^ion-/]
// 3.x
const app = createApp({})
app.config.isCustomElement = tag => tag.startsWith('ion-')
Vue 3 , , 。 runtime-only isCustomElement @vue/compiler-dom —— , compilerOptions option in vue-loader。
config.isCustomElement , , ;
Vue CLI 。
Vue.prototypeをconfigに置き換える.globalProperties
Vue 2では、Vue.prototypeは通常、すべてのコンポーネントがアクセスできるpropertyをVue 3でconfigと同等に追加する.globalPropertiesこれらのpropertyは、インスタンス化コンポーネントの一部としてアプリケーションにコピーされます.
// 2.x
Vue.prototype.$http = () => {}
// 3.x
const app = createApp({})
app.config.globalProperties.$http = () => {}
// provide , globaProperties
プラグインの使用
プラグイン開発者は通常vueを使用する.use、例えば公式のvue-routerがブラウザ環境でどのように自分でインストールされているか
var inBrowser = typeof window !== 'undefined'
/* ... */
if(inBrowser && window.Vue) {
window.Vue.use(VueRouter)
}
現在useグローバルApiは使用されていませんので、このプラグインの使用を手動で指定する必要があります.
const app = createApp(MyApp)
app.use(VueRouter)
Appインスタンスのマウント
createAppを使用する初期化後、アプリケーションインスタンスappはappを使用することができる.mount(domTarget)はコンポーネントインスタンスに掛けられており、以上の変更により、完全な書き方は以下のコードに書き換えられます.
import { createApp } from 'vue'
import MyApp from './MyApp.vue'
const app = createApp(MyApp)
app.componenet('button-counter', {
data: () => ({
count: 0
}),
template:``
})
app.directive('focus', {
mounted: el => el.focus()
})
app.mount('#app')
Provide/inject
と2.xは、インスタンスでprovideオプションを使用するのと同様に、Vue 3アプリケーションインスタンスは、アプリケーション内の任意のコンポーネントによって注入される依存性を提供することもできる.
//
app.provide('guide', 'Vue 3 Guide')
//
export default {
inject: {
book: {
from: 'guide'
}
},
template: `{{ book }}`
}
// provide , globalProperties
アプリケーション間の共有構成
コンポーネントや命令などの構成をアプリケーション間で共有する方法の1つとして、コンポーネントファクトリを作成するには、次の手順に従います.
import { createApp } from 'vue'
import F00 from './Foo.vue'
import Bar from './Bar.vue'
const createMyApp = options => {
const app = createApp(options)
app.directive('focus', /* ... */)
return app
}
createApp(Foo).mount('#foo')
createApp(Bar).mount('#bar')