Thứ nhất, có user.js
, đó là một trong những mô-đun cho store.js
Vuex thu khí-tính Failure khi sử dụng vue-router - họ không có phản ứng
const state = {
isLogin: false
}
const mutations = {
login(state, userid){
state.userid = userid;
}
}
export default {
state,
mutations
}
Sử dụng Vue-router, tôi đã tạo ra một phần App và nhập store.js
.
Và sau đó đến Hợp phần login.vue
. Sau đây là một phần của mã:
<script>
export default {
vuex: {
actions: {
login // this action changes the state of
// isLogin by dispatch `login` mutation
}
},
methods: {
btnClick(){
// here calls the login action
}
}
}
</script>
Tôi nhận thấy rằng phương pháp btnClick
có thể hoạt động trong thành phần này. Nó đã thay đổi store.state.user.isLogin
.
Nhưng đây là một thành phần a.vue
nghe tình trạng isLogin
:
<template>
...
<a
v-if="isLogin"
v-link="'#'">
...
</a>
...
</template>
<script>
// import something
export default {
vuex: {
getters: {
isLogin: ({ user }) => user.isLogin
}
}
}
</script>
Khi btnClick
toggled trong login.vue
, các isLogin
thay đổi. Nhưng có vẻ như rằng mặc dù getter isLogin
trong a.vue
đã được thay đổi, các v-if
trong <a>
không thể phản ứng, vì <a>
không xuất hiện.
Tôi đã thử kiểm tra nếu store
được tiêm vào thành phần con và kết quả là nó đã trôi qua. Ngoài ra, tôi đã cố gắng sử dụng computed
thay vì getters
để nghe isLogin
và không thể phản hồi. khi thêm isLogin
vào các thuộc tính watch
, nó không thể xem được.
Và có một điều mà tôi khá chắc chắn - không thể bỏ qua Vue.use(Vuex)
.
Tôi đã tự hỏi liệu đó có phải là Vue-router
gây ra sự cố không.
Và dường như không có ai đã đặt câu hỏi về vuex
với vue-router
...
Tôi nghĩ rằng khi bạn làm một Vuex xây dựng mô-đun, khi ông đã thực hiện ở đây, bản thân mô-đun trở thành thuộc tính trên 'trạng thái'. Vì nó là một mô-đun được gọi là 'người dùng', nó trở thành một thuộc tính của trạng thái, và thuộc tính' isLogin' sẽ là 'state.user.isLogin' – Jeff
Tôi thấy. Đây chỉ là sai lầm ngu xuẩn của tôi. Bây giờ nó hoạt động! Cảm ơn bạn. –