Vue.jsのコンポーネント通信には、親子コンポーネント間の通信(親から子へのデータの受け渡し)、子親コンポーネント間の通信(子から親へのイベントの発火)、非親子コンポーネント間の通信(イベントバスやVuexなどを使用した中央集権的な状態管理)など、いくつかの方法があります。
そもそもVue.jsとは?という方は以下のリンクからご覧ください
Vue.jsとは?親子コンポーネント間の通信:
親から子へのデータの受け渡し: 親コンポーネントから子コンポーネントへデータを渡すためには、propsを使用します。親コンポーネントで子コンポーネントにデータを渡し、子コンポーネント内でそのデータを使用することができます。
html<!-- 親コンポーネント --> <template> <child-component :message="parentMessage"></child-component> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent' } } } </script>html
<!-- 子コンポーネント --> <template> <div>{{ message }}</div> </template> <script> export default { props: ['message'] } </script>
子親コンポーネント間の通信:
子から親へのイベントの発火: 子コンポーネントから親コンポーネントにイベントを発火するには、$emitメソッドを使用します。子コンポーネントでイベントを発火し、親コンポーネントでそのイベントを受け取ります。
html<!-- 子コンポーネント --> <template> <button @click="sendMessage">Send Message to Parent</button> </template> <script> export default { methods: { sendMessage() { this.$emit('message', 'Hello from child'); } } } </script>html
<!-- 親コンポーネント --> <template> <div> <child-component @message="handleMessage"></child-component> <p>{{ receivedMessage }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { receivedMessage: '' } }, methods: { handleMessage(message) { this.receivedMessage = message; } } } </script>
非親子コンポーネント間の通信:
イベントバスやVuexなどを使用した中央集権的な状態管理: イベントバスを使用する場合、イベントバスを介して異なるコンポーネント間でイベントを発火したり、状態を共有したりすることができます。Vuexを使用する場合は、アプリケーション全体で中央集権的な状態管理を行うことができます。
コメント