В настоящее время я использую хранилище Vuex для своей логики аутентификации, и я понимаю, почему возможность доступа к таким элементам, как токен пользователя, идентификатор пользователя и имя пользователя из любой точки моего приложения, чрезвычайно полезна. Я на 100% уверен, что логика аутентификации принадлежит магазину.
Однако в настоящее время я играю с картами Google и создал компонент, в котором есть карта Google и 3 функции для отображения, добавления и удаления маркеров Google с карты. Теперь я не могу понять, стоит ли мне перенести эту логику в магазин Vuex. Я думаю, что в будущем мне, возможно, придется использовать то, что находится внутри свойства markers: [] в некоторых других компонентах, но все остальное кажется, что оно не будет использоваться ни в каких других компонентах.
Один из плюсов использования хранилища Vuex в этом случае заключается в том, что он сделает этот компонент более читабельным, и вся моя логика будет в одном месте, но я не уверен, оправдывает ли это перемещение логики.
Любые мысли и советы будут оценены.
<template>
<div class="container">
<div class="map">
<GmapMap
@click='addMarker'
:center="center"
:zoom="zoom"
:map-type-id="map"
style="width: 100%; height: 800px"
>
<GmapMarker
:key="index"
v-for="(marker, index) in markers"
:position="marker"
:clickable="true"
:draggable="false"
@click="removeMarker(index)"
/>
</GmapMap>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
data: function() {
return {
markers: [],
center: {lat: 42.150527, lng: 24.746477},
zoom: 15,
map: 'roadmap'
}
},
methods: {
addMarker(event){
axios.post('/location', {
userId: this.$store.state.auth.userId,
marker: event.latLng
}).then(response => {
this.markers.push({ 'id': response.data.locations.id,
'lat': response.data.locations.lat,
'lng': response.data.locations.lng})
}).catch((error) => console.log(error));
},
removeMarker(index){
const markerId = this.markers[index].id
this.markers.splice(index, 1);
axios.post('/deleteLocation', {
userId: this.$store.state.auth.userId,
markerId: markerId
})
}
},
mounted(){
axios.get('/location', {
userId: 1
}).then(response => {
this.markers = response.data.locations
}).catch((error) => console.log(error));
}
}
</script>