【问题标题】:When should I use Vuex?我什么时候应该使用 Vuex?
【发布时间】:2020-01-02 18:24:48
【问题描述】:

现在我开始学习 vue,我正在创建用于编辑数据库的 SPA。现在我不明白应该在哪里使用 Vuex。我可以在任何地方使用道具和$emit,它可以帮助我找到需要的参数。那么在什么情况下我应该使用 Vuex?

【问题讨论】:

  • Vuex 的主页解释了它的用途以及您可能需要它的场景。阅读该内容,然后针对不清楚的地方提出具体问题。
  • 从文档中,如果您需要从不同页面的数量和数据库中访问相同的数据,我会想到。我可以访问数据库并获取不同页面的数据。有人可以详细说明这个问题,请举一些很好的例子。时长

标签: javascript vue.js vuejs2 vue-component vuex


【解决方案1】:

使用 Vuex(这是 Vue 的 Redux 版本)的主要目的是状态(或数据)管理。用外行的话来说,它具有单一的事实来源(用于您的数据)。

它反对在数据更改时发出事件的常见模式,以便应用程序的其他部分可以保持其数据与当前组件的数据同步。

您将更改委托给一个单独的模块:商店,而不是允许一个特定组件直接更改数据。任何使用该数据的组件都会收到有关更改的通知。这在复杂的应用程序中变得非常有用,其中常见的发射模式存在创建循环更新循环的风险。

使用 Redux 模式的应用受益于:

  • 结果的可预测性,
  • 易于测试
  • 代码可维护性和可扩展性
  • 关注点分离
  • 易于调试(时间旅行:为调试目的撤消或重放特定更改的能力)。

简而言之,它为开发人员提供了控制和信心,因为它使理解和修改复杂的代码、数据或应用行为变得更加容易。


与任何其他模式(或系统或工具)一样,Redux 模式可能会被过度使用。很明显,您不必保留仅由商店中的一个组件使用的数据。由于没有其他组件需要知道对该数据的任何更改,因此应该在使用它的组件中对其进行管理。

Vuex 允许将数据组织到模块中,这样您就可以保持一切整洁和可维护。

最后但同样重要的是,使用 Redux 模式最有用的好处之一是让 SSR(服务器端渲染)实现变得轻而易举。 SSR 极大地改善了优化和用户体验,并提高了应用程序的感知性能。

【讨论】:

    【解决方案2】:

    根据来自 Vuedose 博客的this awesome tip

    Vue.js 2.6 引入了一些新特性,其中一个我非常喜欢的是新的全局可观察 API。

    现在您可以在 Vue.js 组件范围之外创建响应式对象。而且,当你在组件中使用它们时,它会适当地触发渲染更新。

    通过这种方式,您可以在不需要 Vuex 的情况下创建非常简单的商店,非常适合需要跨组件共享一些外部状态的简单场景。

    对于这个技巧示例,您将构建一个简单的计数功能,将状态外部化到我们自己的商店。

    首先创建store.js:

    import Vue from "vue";
    
    export const store = Vue.observable({
      count: 0
    });
    

    如果您对突变和操作的想法感到满意,您可以通过创建简单的函数来更新数据来使用该模式:

    import Vue from "vue";
    
    export const store = Vue.observable({
      count: 0
    });
    
    export const mutations = {
      setCount(count) {
        store.count = count;
      }
    };
    
    

    现在您只需要在组件中使用它。要访问状态,就像在 Vuex 中一样,我们将使用计算属性和突变方法:

    <template>
      <div>
        <p>Count: {{ count }}</p>
        <button @click="setCount(count + 1);">+ 1</button>
        <button @click="setCount(count - 1);">- 1</button>
      </div>
    </template>
    
    <script>
      import { store, mutations } from "./store";
    
      export default {
        computed: {
          count() {
            return store.count;
          }
        },
        methods: {
          setCount: mutations.setCount
        }
      };
    </script>
    

    【讨论】:

      【解决方案3】:

      是的,你可以在不使用 Vuex 的情况下做任何事情,但是随着时间的推移,如果你的应用程序变得越来越大,那么维护起来会很困难,

      根据 vuex 文档,

      问题一,深度嵌套传递 props 可能很乏味 组件,并且根本不适用于兄弟组件。问题 二,我们经常发现自己求助于解决方案,例如达到 用于直接父/子实例引用或尝试变异和 通过事件同步状态的多个副本。这两个 模式很脆弱,很快就会导致代码无法维护。

      希望它能回答你的问题。

      【讨论】:

        【解决方案4】:

        查看vuex文档;它描述了为什么/何时要使用 vuex https://vuex.vuejs.org 的所有原因。

        例如,多个组件需要相同的信息、控制突变、验证等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-07
          • 2012-09-22
          • 1970-01-01
          • 2012-12-23
          • 2021-07-13
          • 1970-01-01
          • 2010-12-30
          相关资源
          最近更新 更多