Учусь писать на vuejs. Есть компонент c кнопкой, при клике хочу получить данные и записать их в store. Как правильно это реализовать? Нашел 2 решения, какое из них правильное или может оба не правильные? И почему?
В первом вариант делаю запрос используя actions, во втором прямо из компонента.
Вариант 1
<!-- STORE -->
export default new Vuex.Store({
state: {
items: []
},
getters: {
getItems(state) {
return state.items
}
},
mutations: {
updateItems(state, data) {
state.items = data
}
},
actions: {
loadItems({commit}) {
Vue.http.get(url).then(res => {
commit('updateItems',
res.body)
})
}
}
})
<!-- КОМПОНЕНТ -->
<template>
<div>
<button @click="search">Click</button>
{{items}}
</div>
</template>
<script>
export default {
computed: {
items() {
return this.$store.getters.getItems
}
},
methods: {
search() {
this.$store.dispatch('loadItems');
}
}
}
</script>
Вариант 2
<!--Store как в первом варианте-->
<!--КОМПОНЕНТ-->
<template>
<div>
<button @click="search">Click</button>
{{items}}
</div>
</template>
<script>
export default {
computed: {
items() {
return this.$store.getters.getItems
}
},
methods: {
search() {
this.$http.get(url)
.then(response => {
const items = response.body;
this.$store.commit('updateItems', items);
})
}
}
}
</script>
Правильный вариант номер 1.
Во vuex
для изменения состояния store
из компонентов нужно использовать actions
. Потому что мутации должны быть синхронными, для actions
таких ограничений нет, внутри actions
можно выполнять асинхронные операции.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть задача - увеличивать блок по нажатию "читать подробнее"Так же есть кнопка "свернуть", которая соответственно уменьшает этот блок
Есть простенькие скрипты на JS, которые работают со спрайтами (jpg)Дебажил их отдельно от laravel, всё работает прекрасно
Для отправки данных использую плагин vue-upload-file Из данных о файле есть только blobМожно ли из него как то получить информацию