Vue3 app.provide() 関数
app.provide()は非常に重要な関数であり、アプリケーションのトップレベルでデータやメソッドを提供することができ、これらのデータやメソッドをアプリケーション全体の任意のコンポーネントからアクセスして使用できるようにします。
を通じてapp.provide()とinjectの組み合わせにより、複数のコンポーネント間でデータを簡単に共有でき、props やイベントの煩雑な受け渡しを避けることができます。
1. とはapp.provide()?
app.provide()は Vue3 で提供されている依存性注入メカニズムの一種です。これにより、アプリケーションのトップレベルでグローバルなデータやメソッドを定義し、その後任意の子コンポーネントではinjectこれらのデータやメソッドを取得します。
1.1 なぜ必要なのかapp.provide()?
大規模な Vue アプリケーションでは、複数のコンポーネント間でデータやメソッドを共有する必要がよくあります。props やイベントを介してこれらのデータを渡すと、コードが複雑になり、保守が難しくなります。一方、app.provide()は、この問題を解決するためにより簡潔で効率的な方法を提供します。
2. app.provide()の基本構文
app.provide()の基本構文は非常にシンプルで、2つのパラメータを受け取ります:
例
key:提供されたデータやメソッドを識別するための文字列または Symbol。value:提供するデータまたはメソッド。オブジェクトや関数など、あらゆる型の値を指定できます。
3. 使い方app.provide()?
3.1 アプリケーションのトップレベルでデータまたはメソッドを提供する
まず、アプリケーションのトップレベルでapp.provide()データやメソッドを提供するために、通常はmain.jsファイル内で設定します:
例
import App from './App.vue'
const app = createApp(App)
// グローバルデータを提供
app.provide('message', 'Hello, Vue3!')
// グローバルメソッドを提供
app.provide('logMessage', (msg) => {
console.log(msg)
})
app.mount('#app')
上記のコードでは、app.provide()1つの文字列を提供し'Hello, Vue3!'、1つのメソッドを提供しました。logMessage。
3.2 子コンポーネントで使用するinjectデータまたはメソッドを取得する
子コンポーネントでは、injectアプリケーションのトップレベルで提供されたデータやメソッドを取得します。例:
例
<div>
<p>{{ message }}</p>
<button @click="log">クリック</button>
</div>
</template>
<script>
export default {
inject: ['message', 'logMessage'],
methods: {
log() {
this.logMessage('ボタンがクリックされました!')
}
}
}
</script>
このコンポーネントでは、inject取得しましたmessageとlogMessage、それらをテンプレートとメソッド内で使用しています。
4. 実際の応用例
ユーザー管理システムを開発していると仮定します。複数のコンポーネント間で現在のユーザー情報を共有する必要があります。私たちはapp.provide()ユーザー情報を提供し、必要なコンポーネントで取得して使用します。
4.1 アプリケーションのトップレベルでユーザー情報を提供する
例
import App from './App.vue'
const app = createApp(App)
// 現在のユーザー情報を提供
app.provide('currentUser', {
name: '张三',
age: 25,
email: '[email protected]'
})
app.mount('#app')
4.2 子コンポーネントでユーザー情報を使用する
例
<div>
<h1>ユーザー情報</h1>
<p>名前: {{ user.name }}</p>
<p>年齢: {{ user.age }}</p>
<p>メールアドレス: {{ user.email }}</p>
</div>
</template>
<script>
export default {
inject: ['currentUser'],
computed: {
user() {
return this.currentUser
}
}
}
</script>
この方法を使えば、複数のコンポーネント間でユーザー情報を簡単に共有・使用でき、毎回 props を介して渡す必要はありません。
その他の拡張
Vue3 グローバル API