Committing synchronous state mutations in Vuex store.
Mutations
Mutation là cách duy nhất được phép thay đổi state trong Vuex. Mỗi mutation là một hàm nhận state và đổi state trực tiếp. Gọi mutation bằng commit.
Định nghĩa và commit
Payload
Truyền dữ liệu kèm theo qua tham số thứ hai. Quy ước dùng một object để rõ ràng.
Mutation phải đồng bộ
Đây là quy tắc quan trọng nhất. Mutation phải đồng bộ (synchronous). Không đặt callback bất đồng bộ (setTimeout, fetch) bên trong mutation, vì devtools không thể track đúng thời điểm state đổi, gây khó debug.
Logic bất đồng bộ phải đặt trong action, action gọi fetch xong rồi commit mutation (xem note Actions).
Reactivity caveats
Vuex state dùng cùng hệ reactivity của Vue 2 nên có cùng hạn chế. Thêm property mới vào object hoặc gán phần tử theo index sẽ không reactive.
Với mảng, dùng các method reactive (push, splice) hoặc gán lại mảng mới.
mapMutations
Trộn việc commit thành methods của component.
Đặt tên mutation
Quy ước dùng hằng số cho tên mutation trong project lớn để tránh gõ sai chuỗi và dễ tra cứu.
Tips cho AEM
Mutation nên nhỏ và đơn nhiệm: chỉ gán state. Khi nhận dữ liệu từ API trong AEM (vd gọi Sling Servlet), action lo gọi và xử lý, mutation chỉ lưu kết quả.