# Giao tiếp trong Vue
Cũng như ngoài thực tế - giao tiếp là 1 kỹ năng mềm rất ư là quan trọng
Ừm, quan trọng như vậy nên tui có bài viết này
# Từ cha xuống con bằng props
Cách này dùng trong quan hệ trực tiếp gia phả Cha - Con
<template>
<Con ten="khanh" :tien="tien" />
</template>
# Từ con lên cha bằng $emit
this.$emit('hi', 'chào bố');
Ở component cha nhận như 1 event
<template>
<Con ten="khanh" :tien="tien" @hi="handler" />
</template>
Cũng giống React, ta có thể từ cha truyền Function
xuống để component con gọi - nhưng mà có $emit
để làm gì chứ =))
Everything happens for a reason
# Từ miền nam - ngược ra bắc bằng Event Bus
Ở đây thì không cần quan tâm là quan hệ, quan họ cái gì cả =)) Thậm chí là chung 1 component =))
Khởi tạo
const EventBus = new Vue()
Vue.prototype.$eventBus = EventBus
Sử dụng nhẹ
this.$eventBus.$emit('hello', 'Can you hear me?');
this.$eventBus.$on('hello', () => console.log('Yeah, I can hear you'));
Thật ra đây là một dạng của Event Driven Architecture (EDA)
, sử dụng 1 $eventBus
(instance của Vue) như là EventEmitter.
# State Management - Vuex
Không lẽ xài Vue mà đi xài Redux hay MobX trời 😃) Nhưng điều này là có thật... thích trải nghiệm thì cài... tui thì xin kiếu
500 đồng hình minh họa
500 code biếm họa
Khởi tạo
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
Sử dụng
store.commit('increment')
console.log(store.state.count) // -> 1
Ừ nhìn sao ko có chút Vue nào hết vậy =)))) Ừm nó có thể sống độc lập mà không cần Vue. Cũng giống Redux hay MobX vậy.
# Tại sao phải dùng State Management?
- Đóng vai trò là 1 Global state - nên việc chia sẻ state sẽ dễ dàng hơn là truyền qua props
- Tránh implement nhiều logic cho component nếu sử dụng EventBus
- Như là một data center - nên rất dễ tạo snapshot hay traveling time
- Hỗ trợ nhiều modules => Những lý do trên khiến App dễ dàng mở rộng