Как я могу решить "Uncaught TypeError: Невозможно прочитать свойство 'get' of undefined" в хранилище vuex?
Если я попробую this .$session.get(SessionKeys.Cart)
в моем компоненте так:
<template>
...
</template>
<script>
...
export default {
...
methods: {
add(item) {
console.log(this.$session.get(SessionKeys.Cart)
...
}
}
}
</script>
Оно работает. Я успешно получаю сессионную корзину
Но если я попробую это в моем магазине Vuex, вот так:
import { set } from 'vue'
// initial state
const state = {
list: {}
}
// getters
const getters = {
list: state => state.list
}
// actions
const actions = {
addToCart ({ dispatch,commit,state },{data})
{
console.log(this.$session.get(SessionKeys.Cart))
...
}
}
// mutations
const mutations = {
...
}
export default {
state,
getters,
actions,
mutations
}
Существует ошибка: Uncaught TypeError: Cannot read property 'get' of undefined
Как я могу решить эту ошибку?
2 ответа
Вы можете передать компонент this
в вашу диспетчерскую функцию, называемую диспетчеризацией с полезной нагрузкой. вот так:
<template>
...
</template>
<script>
...
export default {
...
methods: {
this.$store.dispatch('addToCart', { data: {}, ctx: this })
// add(item) {
// console.log(this.$session.get(SessionKeys.Cart)
// ...
//}
}
}
</script>
import { set } from 'vue'
// initial state
const state = {
list: {}
}
// getters
const getters = {
list: state => state.list
}
// actions
const actions = {
addToCart ({ dispatch, commit, state }, { data, ctx })
{
console.log(ctx.$session.get(SessionKeys.Cart))
...
}
}
// mutations
const mutations = {
...
}
export default {
state,
getters,
actions,
mutations
}
вы можете сделать это
import Vue from 'vue’
const session = Vue.prototype.$session;
в верхней части вашего магазина и в вашем методе действий
console.log(session.get(SessionKeys.Cart))
это сработает