store/ 的 Vuex 经典模式已弃用,将在 Nuxt 3 中删除

Posted

技术标签:

【中文标题】store/ 的 Vuex 经典模式已弃用,将在 Nuxt 3 中删除【英文标题】:Vuex Classic mode for store/ is deprecated and will be removed in Nuxt 3 【发布时间】:2019-12-31 03:59:32 【问题描述】:

我有以下文件,但找不到警告“存储/的经典模式已弃用并将在 Nuxt 3 中删除”的原因。只是收到那个烦人的警告,一切正常。

modules/data.js 文件存储在 nuxt.js 中。

    const state = () => (
      loadedPosts: []
    );

    const mutations = 
      setPosts(state, posts)
        state.loadedPosts = posts;
      
    ;

    const actions = 
      setPosts(vuexContext, posts)
        vuexContext.commit('setPosts', posts);
      
    ;

    const getters = 
      loadedPosts(state)
        return state.loadedPosts;
      
    ;

    export default 
      state,
      actions,
      getters,
      mutations
    ;

index.js 存储在 nuxt.js 中的文件。

import Vuex from 'vuex';
import data from "~/store/modules/data";

const createStore = () => 
  return new Vuex.Store(
    modules: 
      data: 
        namespaced: true,
        ...data
      
    
  );
;

export default createStore;

【问题讨论】:

【参考方案1】:

最后,在阅读了很多答案和博客后,我找到了解决方案。

重要提示:-忘记了您对 vue.js 应用程序中的 vuex 模块的了解。在 nuxt.js 中使用 Vuex 有点不同。

解决方案:- Nuxt.js 让您拥有一个 store 目录,其中每个文件对应一个模块。只需在 store 中直接添加必要的文件,您无需在 store 中的“modules”目录中创建和添加文件。 index.js 文件是一个特殊文件,我们将在其中放置与模块无关的逻辑。

store/data.js

export const state = () => (
  loadedPosts: []
);

export const mutations = 
  setPosts(state, posts)
    state.loadedPosts = posts;
  
;

export const actions = 
  setPosts(vuexContext, posts)
    vuexContext.commit('setPosts', posts);
  
;

export const getters = 
  loadedPosts(state)
    return state.loadedPosts;
  
;

在项目中使用状态

this.$store.data.loadedPosts

在项目中使用变异

this.$store.commit('data/setPosts', [id: '1',..., id: '2',...]);

在项目中使用动作

this.$store.dispatch('data/setPosts', [id: '1',..., id: '2',...]);

在项目中使用 getter

this.$store.getters['data/loadedPosts'];

重要参考:-

    观看此视频Nuxt.js tutorial for beginners - nuxt.js vuex store 阅读此博客Efficiently understanding and using Nuxt + Vuex

【讨论】:

...getters['data/loadedPosts'] / ...dispatch('data/setPosts') - Mr.Stark 我感觉不舒服.. 我的意思是说真的这是一个糟糕的语法.. 但你 100% 正确,这是 nuxt 的新协议,大错特错.. 另一种方式是创建store/data/[actions.js, getters.js, mutations.js, state.js],这样nuxt就会使用“data”文件夹作为模块。 只是不需要创建 index.js【参考方案2】:

Nuxt 显示此警告是因为您使用的是经典的 vuex 存储,而不是“模块模式”。你可以在nuxt doc了解更多。

【讨论】:

以上是关于store/ 的 Vuex 经典模式已弃用,将在 Nuxt 3 中删除的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Xcode 7.3 警告:`init` 已弃用:它将在 Swift 3 中删除:在序列上使用`enumerate()` 方法 [重复]

pandas.scatter_matrix 返回错误:rowNum 属性在 Matplotlib 3.2 中已弃用,将在两个次要版本后删除

PHP 已弃用:each() 函数已弃用 [重复]

警告:已访问对象“<__main__.Tab >object at”的已弃用属性“<StringProperty name=text>”,将在未来版本中删除

Lucene RAMDirectory 已弃用-无论如何如何保留仅目录 RAM?

.NET Core 中是不是已弃用 ApiController