使用Nuxt.js在Vuex中预提取api数据

时间:2018-12-07 15:10:50

标签: vuejs2 vuex nuxt.js prefetch

我正在尝试在客户端加入之前预取一些数据并更新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 触发,并且在页面加载时我在终端中记录了第一个元素。但是,我在客户端的商店是空的。

我想念什么?

1 个答案:

答案 0 :(得分:0)

在朋友的帮助下,我们设法通过删除 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));
  } 
}