使用 Nuxt.js 在 Vuex 中预取 api 数据
Pre-fetch api data in Vuex with Nuxt.js
我正在尝试在客户端启动之前预取一些数据并更新 Vuex。
store/index.js
export const state = () => ({});
export const getters = {};
export const actions = {
async nuxtServerInit ({ dispatch }) {
await dispatch('nasa/getImages');
}
};
store/moduleName.js
import fetch from 'node-fetch';
export const state = () => ({
images: []
});
export const mutations = {
storeImages(state, data) {
state.images = [];
state.images.push(...data);
console.log(state.images[0]); <- this logs in the terminal
}
}
export const actions = {
getImages(store) {
return fetch('api/url').then(response => {
response.json().then(function(data) {
store.commit('storeImages', data.collection.items.slice(0, 24));
});
});
}
}
我的突变由 nuxtServerInit 触发,我在页面加载时在终端中记录了第一个元素。然而,我在客户端的商店是空的。
我错过了什么?
在朋友的帮助下,我们设法通过删除 node-fetch 并向 Vuex 添加 axios 来解决这个问题。
唯一的变化是 store/moduleName.js
现在看起来像:
import Axios from 'axios'
export const state = () => ({
images: []
});
export const mutations = {
storeImages(state, data) {
state.images.push(...data);
}
}
export const actions = {
async getImages(store) {
let res = await Axios.get('api/url');
store.commit('storeImages', res.data.collection.items.slice(0, 24));
}
}
我正在尝试在客户端启动之前预取一些数据并更新 Vuex。
store/index.js
export const state = () => ({});
export const getters = {};
export const actions = {
async nuxtServerInit ({ dispatch }) {
await dispatch('nasa/getImages');
}
};
store/moduleName.js
import fetch from 'node-fetch';
export const state = () => ({
images: []
});
export const mutations = {
storeImages(state, data) {
state.images = [];
state.images.push(...data);
console.log(state.images[0]); <- this logs in the terminal
}
}
export const actions = {
getImages(store) {
return fetch('api/url').then(response => {
response.json().then(function(data) {
store.commit('storeImages', data.collection.items.slice(0, 24));
});
});
}
}
我的突变由 nuxtServerInit 触发,我在页面加载时在终端中记录了第一个元素。然而,我在客户端的商店是空的。
我错过了什么?
在朋友的帮助下,我们设法通过删除 node-fetch 并向 Vuex 添加 axios 来解决这个问题。
唯一的变化是 store/moduleName.js
现在看起来像:
import Axios from 'axios'
export const state = () => ({
images: []
});
export const mutations = {
storeImages(state, data) {
state.images.push(...data);
}
}
export const actions = {
async getImages(store) {
let res = await Axios.get('api/url');
store.commit('storeImages', res.data.collection.items.slice(0, 24));
}
}