VUEX API层是突变还是吸气?

时间:2018-06-22 11:23:01

标签: vue.js vuex

假设我收到了API的回复:

{
   name: 'Mat',
   last_name: 'Kowalsky',
}

Person的界面如下:

{
    name: string;
    lastName: string;
    children: Person[]
}

将一个模型转换为另一个模型的最佳位置在哪里?我应该这样做吗?

 const setPerson: (state: State, person: any) => {
     state.person = {
        name: person.name,
        lastName: person.last_name,
        children: (person.children) ? person.children : []
     } 
  }

或者像这样的吸气剂:

   const getters = {
      person: (state: State) => {
         return {
             name: state.person.name,
             lastName: state.person.last_name,
             children: (state.person.children) ? state.person.children : []
         }
      }

   }

致谢

3 个答案:

答案 0 :(得分:1)

在插入新人员时,该突变被调用一次。 吸气剂很可能经常被调用。

这就是为什么我要将转化放入突变中的原因。

答案 1 :(得分:0)

如果我必须选择,那是变异,但是我认为最好的方法是,因为您的商店依赖于您的api。

您可以将API的响应映射到您的Person,就像您的变异中已有一个Person对象一样。

承诺:

myPromise.then(res => ({ res.name, lastName: res.last_name }))

使用Rxjs:

myObservable.pipe(
   map(res => ({ res.name, lastName: res.last_name }))
)

答案 2 :(得分:0)

在使用响应时,应使用突变。由于它不依赖于任何商店属性。

字母是依赖于另一个商店属性的字母,当商店属性发生更改时,getter会自动更改。因此,如果您的媒体资源与商店的其他媒体资源具有依赖性,那么最好使用 getters