我一直在使用Vuex,它坚持只在mutatorsactions之间改变状态,这让我觉得你的store 应该只包括尽可能平坦的对象,只有基本类型.

有些线程甚至规定对数据进行规范化(因此,不用嵌套对象树,而是使用id数组来指示树关系的对象).这可能与您的JSON api非常匹配.

这让我觉得在flux存储中存储类(可能有methods to alter themselves个)是一种反模式.事实上,即使将存储的数据水合到一个类中,似乎也在逆潮流而动,除非您的类不对其内部数据执行任何修改.

这让我想到,在Vue/Vuex/Reactive/Flux中使用any类是否是一种反模式?

这些库似乎被明确设计用于处理普通的JS对象,而您与API之间的一般交互(数据输入、数据输出)让我感觉像是一种更具功能性的方法(sans不变性),这正是最初的设计人员所考虑的.

编写从function => test => state mutator wrapper around function开始运行的代码似乎也更容易.

我知道JS对象和JS类的行为非常相似(基本上是一样的),但我的逻辑是,如果你是don't design with classes in mind,那么你更有可能是not pollute your state with non-flux state changes.

社区中是否普遍认为flux代码应该更具功能性,更少面向对象?

推荐答案

对你的 idea 完全正确.像ReduxVuex这样的状态容器应该保存数据 struct ,而不是函数.的确,JavaScript中的函数只是可调用的对象.也可以在函数上存储静态数据.但这仍然不符合纯数据的条件.也是出于同样的原因,我们没有把Symbols放入我们的州容器中.

回到ES类,只要您使用类作为POJO,即仅存储数据,那么您就可以自由使用这些类.但是,如果可以有简单的普通对象,为什么还要有类呢.

将数据从UI组件中分离出来,并将其移动到状态容器中,这是函数式编程的基础.大多数严格的函数式语言,如Haskell、Elm、OCaml,甚至Elixir/Erlang都是这样工作的.这为应用程序中的数据流提供了强有力的理由.此外,在这些语言中,数据是不可变的,这一事实补充了这一点.因此,不存在像有状态类这样的构造.

使用JavaScript,因为事物本身是可变的,边界有点模糊,很难定义好的实践.

最后,作为一个社区,对于使用功能性方法没有明确的共识,但社区似乎正在朝着更功能化、无状态的组件方法发展.以下是一些很好的例子:

现在,即使我们在VueReact中都有功能组件.

Vue.js相关问答推荐

在 Vuejs 中更新 Chartjs 图表数据集

vue 不重新渲染数据更改

两个div元素之间的vue2过渡

无需直接 DOM 操作即可绘制d3-axis

使用 jquery-chosen 插件更新 vuejs 模型值

我可以从手表调用方法并安装吗?

在 vue-router 中带有路由的 Vuejs2 模态

错误:您可能需要额外的加载器来处理这些加载器的结果.

v-for 中的 VueJS 插槽

在 vue/vuex(/flux?) 中使用 ES6 类是一种反模式吗?

vue 在 v-model 之后执行 @click

将 VueJS 数据属性重置为初始值

使用props向组件添加类名

Vue如何将动态ID与v-for循环+字符串中的字段连接起来?

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

异步api调用后如何使用vuex getter

Laravel 和 Vue - handler.call 不是函数

Vuetify RTL 风格

是否有 v-cloak 逆?

如何在 Promise 回调中更新 Vue 应用程序或组件的属性?