使用 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));
  } 
}