#vue.js #vuex
#vue.js #vuex
Вопрос:
Внезапно мне не удается получить значение из хранилища vuex. отсутствует что-то тривиальное, но не вижу, что (я новичок 🙁 )
В моем компоненте я импортирую mapstate:
<script>
import { mapState, mapActions } from 'vuex';
export default {
mounted(){
console.log('component mounted');
},
computed: {
...mapState([
'currentSpeler' ,'currentSpelerCard', 'currentGame'
]),
},
На панели Vue консоли Chrome я вижу, что значение currentGame существует.
Я могу заставить свой скрипт работать, когда я использую:
console.log("currentGame.id =" this.$store.state.currentGame.id);
но когда я использую:
console.log("currentGame.id =" this.currentGame.id);
Я получаю сообщение об ошибке:
Cannot read properties of undefined (reading 'id')
Кто-нибудь видит, чего мне не хватает?
Комментарии:
1. Убедитесь, что вы инициализировали
currentGame
внутренние состояния значением по умолчанию!2. Попробовал… К сожалению, это не помогло… Но поскольку
this.$store.state.currentGame
я уже работал, я действительно не ожидал, что это будет решением..3. Пожалуйста, укажите путь к каталогу, в который вы поместили этот компонент
4.
resources/js/store/state.js
компонентresources/js/components/MemoryGame.vue
Ответ №1:
Согласно документам Vuex, помощник mapState возвращает объект по умолчанию.
Вы импортируете свои состояния в массив. Вы можете использовать object вместо array.
computed: {
...mapState({
currentSpeler: state => state. currentSpeler,
currentSpelerCard: state => state.currentSpelerCard,
currentGame: state => state.currentGame
}),
},
Комментарии:
1. К сожалению, это не работает. В другом компоненте я без проблем использовал обозначение массива: вычисленный { …mapState([ ‘cards’ ]) },
2. можете ли вы поделиться своими файлами хранилища
3. Это state.js :
export default{ cards:[], games:[], token:localStorage.getItem('access_token') || null, currentGame:{}, currentSpeler:{}, currentSpelerCard:{}, }
но в другом компоненте, который я используюcomputed: { ...mapState([ 'currentSpeler' ,'currentSpelerCard', 'currentGame' ]), },
, и он работает как шарм. Такжеthis.$store.state.currentGame.id
работает нормально. Поэтому я не думаю, что что-то не так с состоянием… Возможно, я забыл что-то тривиальное..
Ответ №2:
Я бы попытался записать в консоль текущую игру и посмотреть, как она выглядит, тогда вы можете двигаться дальше. Я предполагаю, что вы каким-то образом инициализируете параметр id currentGame при использовании другого компонента.
Комментарии:
1. Спасибо за проявленный интерес к этому вопросу. Я попытался записать в консоль саму текущую игру: она также не определена… Консоль говорит:
currentGame.id =undefined
также, когда я прошу зарегистрировать другой объект, который доступен в хранилище (проверено в консоли Chrome, с помощью плагина Vue, отображаются все объекты хранилища …) Похоже, что mapState не работает в этом конкретном объекте Memory.vue. Инициализация точно такая же, как и у других компонентов…..2. да, если вы разместите репозиторий где-нибудь, я могу взглянуть на него, но без него я действительно не знаю, что еще может быть не так в этом банкомате. также попробуйте получить его из родительского компонента, возможно, в качестве реквизита .. или idk. извините.
3. Спасибо, что подумали вместе. Только что обнаружил свою глупую ошибку… (ах ..) У меня был второй экземпляр Computed: { …}, определенный в нижней части моего скрипта…. Итак, объявление computed: было перезаписано… Обнаружил ошибку, когда решил скопировать компонент по частям..
4. да, был там :]
Ответ №3:
Найдена ошибка…
Я дважды объявил computed: { …} .
computed: {
...mapState([
'currentSpeler' ,'currentSpelerCard', 'currentGame',
]),
},
в начале моего скрипта … и
computed: {
sec(){
if(this.totalTime.seconds < 10){
return '0' this.totalTime.seconds;
}
return this.totalTime.seconds;
},
min(){
if(this.totalTime.minutes < 10){
return '0' this.totalTime.minutes;
}
return this.totalTime.minutes;
}
},
логика memorygame в конце моего скрипта … перезаписывает mapState…
Очень глупо … * ударяется головой о стол *