Невозможно прочитать свойства undefined (чтение «геттеров»)

Может ли кто-нибудь помочь с приведенным ниже, я получаю следующую ошибку Невозможно прочитать свойства неопределенного (чтение «геттеров»)

Я работаю над проектом, в котором мои магазины должны возвращать массив в мой index.vue.

Есть ли способ обойти это без использования магазина Vuex?

Каталог моего магазина содержит следующие файлы

index.js

export const state = () => ({})

парковкаPlaces.js

import {getters} from '../plugins/base'

const state = () => ({
  all: []
});

export default {
  state,
  mutations: {
    SET_PARKINGPLACES(state, parkingPlaces) {
      state.all = parkingPlaces
    }
  },
  actions: {
    async ENSURE({commit}) {

        commit('SET_PARKINGPLACES', [
          {
          "id": 1,
          "name": "Chandler Larson",
          "post": "37757",
          "coordinates": {
            "lng": -1.824377,
            "lat": 52.488583
          },
          "total_spots": 0,
          "free_spots": 0
        },
        ]
        )
      }
    },
  getters: {
    ...getters
  }
}

index.vue

<template>
  <div class = "min-h-screen relative max-6/6" >
    <GMap class = "absolute inset-0 h-100% bg-blue-400"
      ref = "gMap"
      language = "en"
      :cluster = "{options: {styles: clusterStyle}}"
      :center = "{lat:parkingPlaces[0].coordinates.lat, lng: parkingPlaces[0].coordinates.lng}"
      :options = "{fullscreenControl: false, styles: mapStyle}"
      :zoom = "5"
    >
      <GMapMarker
        v-for = "location in parkingPlaces"
        :key = "location.id"
        :position = "{lat: location.coordinates.lat, lng: location.coordinates.lng}"
        :options = "{icon: location.free_spots > 0 ? pins.spacefree : pins.spacenotfree}"
        @click = "currentLocation = location"
      >
        <GMapInfoWindow :options = "{maxWidth: 200}">
          <code>
            lat: {{ location.coordinates.lat }},
            lng: {{ location.coordinates.lng }}
          </code>
        </GMapInfoWindow>
      </GMapMarker>
      <GMapCircle :options = "circleOptions"/>
    </GMap>
  </div>
</template>

<script>

import {mapGetters, mapActions} from 'vuex';




export default {




 // async mounted() {
 //   //  // console.info('http://localhost:8000/api/parkingPlace')
 //   // console.info(process.env.API_URL)
 //   // const response = await this.$axios.$get('PARKING_PLACE')
 //   //
 //   //  console.info('response', response)
 //
 //   // console.info(location)
 //  },

  data() {
    return {
      currentLocation: {},
      circleOptions: {},
      // parkingPlaces: [
      //array of parkingPlaces
      // ],
      pins: {
        spacefree: "/parkingicongreen3.png",
        spacenotfree: "/parkingiconred3.png",
      },
      mapStyle: [],
      clusterStyle: [
        {
          url: "https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m1.png",
          width: 56,
          height: 56,
          textColor: "#fff"
        }
      ]
    }
  },

  computed: {
    ...mapGetters({
      'parkingPlaces': "parkingPlaces/all"
    })
  },

  async fetch() {
    await this.ensureParking()
  },
  methods: {
    ...mapActions({
      ensureParking: 'parkingPlaces/ENSURE'
    })
  }
 }
</script>

base.js

import getters from "./getters";

export {getters};

getters.js

export default {
  all: state => state.all
};

Изображение моего каталога файлов ниже

изображение ошибки

Вы можете добавить свой каталог файлов? или скриншот

Delano van londen 24.11.2022 10:12

Привет @Delavanlonden, я добавил это выше

newToBeingNerdy 24.11.2022 10:21
dev.to/jacobandrewsky/introduction-to-nuxt-3-modules-5h8o это может вам помочь
Delano van londen 24.11.2022 10:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
161
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

ВparkPlaces.js: попробуйте использовать import {getters} from '../plugins/base.js' вместо import {getters} from '../plugins/base'.

В base.us: попробуйте использовать import getters from './getters.js' вместо import getters from './getters'.

Эй, я пробовал это много раз раньше, но, похоже, не исправляет ошибку. Спасибо за вклад :)

newToBeingNerdy 24.11.2022 10:22

Я также пробовал это, но не повезло :( Я перебрал все возможные вещи, которые могут быть в течение нескольких дней, и эта ошибка все еще существует.

newToBeingNerdy 24.11.2022 10:34

@newToBeingNerdy есть ли номер строки с сообщением об ошибке? Или любая другая информация?

asdf3.14159 24.11.2022 10:38

Я обновил свой пост выше, чтобы показать изображение ошибки, в IDE ошибок нет.

newToBeingNerdy 24.11.2022 10:41

Я считаю, что у вас проблема с пространством имен или ваш магазин неправильно инициализирован. Убедитесь, что вы зарегистрировали свой parkingPlaces.js модуль с namespaced свойством -

import parkingPlacesModule from './parkingPlaces.js';
const store = new Vuex.Store({
  modules: {
    parkingPlaces: {
      namespaced: true,
      ...parkingPlacesModule
    }
  }
});

Кроме того, вы можете передать имя хелперу mapGetters, например:

computed: {
  ...mapGetters('parkingPlaces', [
    'all', // -> this.all
  ])
}
Ответ принят как подходящий

зачем вам нужно управление состоянием:

Vuex — это шаблон управления состоянием + библиотека для приложений Vue.js. Он служит централизованным хранилищем для всех компонентов приложения с правилами, гарантирующими, что состояние может изменяться только предсказуемым образом.

сегодня вы можете попробовать nuxt3 тогда у вас есть доступ к Nuxt3 управлению состоянием или попробуйте Pinia не Vuex это лучшие варианты для Vue3.

если вы хотите использовать Vue2, Nuxt2 и Vuex для управления состоянием, то:

во-первых, почему ваш файл геттеров находится в плагинах?

используйте эту структуру:

|__магазин

⠀⠀|__ index.js

⠀⠀|__ getters.js

содержимое вашего файла getter должно быть таким:

export default {
 //your getters
};

затем вы можете импортировать эти геттеры в свой файл index.js следующим образом:

import getters from "./getters";
const store = createStore({
  state () {
    return {
      something: 0
    }
  },
  getters
})

а затем вы используете mapGetters:

...mapGetters({
  parkingPlaces: 'all'
})

если у вас есть другой магазин, вы должны использовать модули:

const moduleA = {
  state: () => ({ ... }),
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
  state: () => ({ ... }),
  mutations: { ... },
  actions: { ... }
}

const store = createStore({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

вы можете разделить файлы, и структура будет:

|__ магазин

⠀⠀|__ index.js # куда собираем модули и экспортируем магазин

⠀⠀|__actions.js # корневые действия

⠀⠀|__mutations.js # корневые мутации

⠀⠀|__ модулей

⠀⠀⠀⠀|__ moduleA.js # модульA модуль

⠀⠀⠀⠀|__ moduleB.js # модуль moduleB

Спасибо, что потратили свое драгоценное время на то, чтобы обучить меня этому. ;)

newToBeingNerdy 30.11.2022 21:38

рада помочь моему другу

sadeq shahmoradi 30.11.2022 22:59

Вы можете попробовать это следующими способами

В геттерах.js

export const getters = {
  all: state => state.all
};

В base.js

export * from "./getters";

Этот вышеприведенный способ сделает ваш файл base.js объектом, предоставляющим getters объект.

Другие вопросы по теме