admin管理员组文章数量:1399925
I'm learning Vue 3 with Vuex 4 and I'm stucked with something that I'm pretty sure it's simple but I can't see.
In few words, i'm trying to set some data in state
to have it available to use it in my ponents but it isn't working.
Let me show you the code:
/// store.js
import { createStore } from 'vuex';
import axios from 'axios';
const store = createStore({
state: {
user: {},
products: []
},
mutations: {
SET_USER: (state, user) => {
state.user = user;
},
SET_PRODUCTS: (state, products) => {
state.products = products;
},
},
actions: {
GET_USER: async function ({ mit }) {
const user = await axios.get('')
mit('SET_USER', user)
},
GET_PRODUCTS: async function ({ mit }) {
const products = await axios.get('')
mit('SET_PRODUCTS', products)
},
}
})
export default store;
/// MyComponent.vue
<template>
<div class='bg-aerolab-main'>
{{ user }} {{ productsTest }}
</div>
</template>
import { puted } from "vue";
import { useStore } from 'vuex';
export default {
setup() {
const store = useStore();
const user = puted(() => store.state.user);
const productsTest = puted(() => store.state.products);
console.log(user);
console.log(productsTest);
return {
user,
productsTest
};
}
}
/// main.js
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'
import axios from 'axios'
import VueAxios from 'vue-axios';
import store from './store';
const app = createApp(App)
app.use(VueAxios, axios)
app.use(store)
app.mount('#app')
Of course the {{ users }}
and {{ productsTest }}
bindings are not displaying any data aswell as both console.logs.
PD: I've tried to fetch the data directly in my ponent and it's working so it's not something related to the data fetched from the API.
I'm learning Vue 3 with Vuex 4 and I'm stucked with something that I'm pretty sure it's simple but I can't see.
In few words, i'm trying to set some data in state
to have it available to use it in my ponents but it isn't working.
Let me show you the code:
/// store.js
import { createStore } from 'vuex';
import axios from 'axios';
const store = createStore({
state: {
user: {},
products: []
},
mutations: {
SET_USER: (state, user) => {
state.user = user;
},
SET_PRODUCTS: (state, products) => {
state.products = products;
},
},
actions: {
GET_USER: async function ({ mit }) {
const user = await axios.get('https://coding-challenge-api.aerolab.co/user/me')
mit('SET_USER', user)
},
GET_PRODUCTS: async function ({ mit }) {
const products = await axios.get('https://coding-challenge-api.aerolab.co/products')
mit('SET_PRODUCTS', products)
},
}
})
export default store;
/// MyComponent.vue
<template>
<div class='bg-aerolab-main'>
{{ user }} {{ productsTest }}
</div>
</template>
import { puted } from "vue";
import { useStore } from 'vuex';
export default {
setup() {
const store = useStore();
const user = puted(() => store.state.user);
const productsTest = puted(() => store.state.products);
console.log(user);
console.log(productsTest);
return {
user,
productsTest
};
}
}
/// main.js
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'
import axios from 'axios'
import VueAxios from 'vue-axios';
import store from './store';
const app = createApp(App)
app.use(VueAxios, axios)
app.use(store)
app.mount('#app')
Of course the {{ users }}
and {{ productsTest }}
bindings are not displaying any data aswell as both console.logs.
PD: I've tried to fetch the data directly in my ponent and it's working so it's not something related to the data fetched from the API.
Share Improve this question edited Nov 7, 2021 at 16:10 Nimantha 6,4866 gold badges31 silver badges76 bronze badges asked Mar 28, 2021 at 20:11 Franco AlemandiFranco Alemandi 3451 gold badge5 silver badges15 bronze badges2 Answers
Reset to default 4You've to dispatch that actions inside mounted hook :
import { puted , onMounted} from "vue";
import { useStore } from 'vuex';
export default{
setup() {
const store = useStore();
const user = puted(() => store.state.user);
const productsTest = puted(() => store.state.products);
onMounted(()=>{
store.dispatch('GET_USER');
store.dispatch('GET_PRODUCTS');
})
return {
user,
productsTest
};
}
}
Fetch Data from main.js
I'm sure the selected answer would work properly if you are fetching data from your ponent(s). However, if you are looking to Fetch Data from main.js
as OP was asking or app.js
if you are using Vue3 with Laravel, you should use mounted()
in your createApp()
function.
const app = createApp({
mounted(){
store.dispatch('YOUR_ACTION') // GET_USER or GET_PRODUCTS in OP's case
}
});
Remember to set up your Vuex store before calling this so the store
is defined.
In your ponents
You can access the puted state with position API, as shown below:
import { puted } from "vue";
import { useStore } from "vuex";
setup() {
const store = useStore();
return {
products: puted(() => store.state.YOUR_STATE),
//replace YOUR_STATE with your own. In OP's case, it's user or products
};
}
本文标签: javascriptSetting data in state not working in Vue 3 with Vuex 4Stack Overflow
版权声明:本文标题:javascript - Setting data in state not working in Vue 3 with Vuex 4 - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744191549a2594541.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论