Plan de transformación de Vuex en TSX: ¿Cómo lidiar con Vuex en el proyecto Vue2 de transformación de TS?

Los vuex más populares actualmente incluyen: vuex-aggregate, vuex-class, vuex-module-decorators

npm encontró los relevantes, mire el gráfico de tendencias: vuex-aggregate vs vuex-class vs vuex-class-component vs vuex-class-module vs vuex-class-modules vs vuex-module-decorators | tendencias npm

Estrellas Asuntos Versión Actualizado Creado

agregado de vuex

14 19 4.1.3 Hace 4 años Hace 4 años

clase vuex

1.670 18 0.3.2 hace 3 años Hace 5 años

componente de clase vuex

213 40 2.3.6 Hace 2 meses hace 3 años

módulo de clase vuex

0.0.16 hace 3 años Hace 5 años

módulos de clase vuex

175 17 1.3.0 Hace un año hace 3 años

decoradores-de-módulos-vuex

1.705 131 2.0.0 Hace 2 meses Hace 4 años

De hecho, lo que se puede comparar es vuex-class y vuex-module-decorators, personalmente prefiero vuex-class, por supuesto, los dos se pueden combinar y usar juntos. Uno se define en la tienda y el otro se usa en el componente vue.

clase vuex

Dirección del proyecto: GitHub-ktsn/vuex-class: ayudantes de enlace para Vuex y vue-class-component Aunque esto no se ha actualizado en tres años, no tiene nada de malo.

Esto debe usarse junto con el componente de clase vue.

importar {Componente como tsc} desde 'vue-tsx-support'; 
importar {Componente, Prop} desde 'vue-property-decorator'; 
importar {Estado, Getter, Acción, Mutación, espacio de nombres} de 'vuex-class' 
const someModule = namespace('ruta/al/módulo') 
@Component 
exportar clase predeterminada Demo extiende tsc<Props> { 
    @State(estado => estado .bar) stateBar 
    @Getter('foo') getterFoo 
    @someModule.Getter('foo') moduleGetterFoo 
    render(){ 
        retrun ( 
            <div>demo</div> 
        ) 
    } 
}

Usar esto es conveniente para usar en componentes a través de decoradores y no es necesario cambiar la tienda vuex original en absoluto.

Pero si usa @vue/composition-api, no se puede usar vue-class. Se recomienda utilizar vuex-module-decorators aquí.

decoradores-de-módulos-vuex

Artículo anterior: GitHub - championswimmer/vuex-module-decorators: Decoradores TypeScript/ES7 para crear módulos Vuex de forma declarativa

Documentación oficial: Módulos con espacios de nombres | vuex-module-decorators

Esto es conveniente para definir módulos de tienda.

importar {Módulo, VuexModule, Mutación, Acción} desde 
la interfaz de exportación 'vuex-module-decorators' UserInfo { 
  nombre: cadena; 
  edad: número 
} 
@Module 
exporta la clase predeterminada UserInfo extiende VuexModule { 
  nombre = 'zhoulujun' 
  edad = 30 

  @Mutation 
  setUser(usuario: UserInfo) { 
    this.name = user.name 
  } 
  // la acción 'incr' confirma la mutación 'incremento' cuando hecho con el valor de retorno como carga útil 
  @Action({ commit: 'setUser' }) 
  getUser() { 
    // 不能直接调用 this.
    return http.getUser(id).then((user)=>{ 
        this.context.commit('setUser', usuario); 
    }) 
  } 
}

Crear tienda

importar Vue desde 'vue'; 
importar Vuex desde 'vuex'; 
importar {UserInfo} desde './modules/user'; 

Vue.use(Vuex); 

exportar interfaz IRootState { 
  usuario: UserInfo 
} 
exportar valor predeterminado nuevo Vuex.Store<IRootState>({ 
  // módulos: { 
  // usuario: Usuario, 
  // }, 

});

El punto del que hay que quejarse aquí es que la función en el decorador @Action llama directamente al método decorado @Mutation.

@AcciónMutación

En vuex, los datos en el estado deben cambiarse mediante confirmación. Hay un modificador MutationAction en vuex-module-decorators, que puede modificar directamente los datos de estado.

exportar la clase predeterminada PassengerStore extiende VuexModule { 
  nombre de usuario público = ''; 
  contraseña pública = ''; 
 
  //'nombre de usuario' y 'contraseña' se reemplazan por el objeto devuelto, 
  //El formato debe ser `{nombre de usuario:..., contraseña :. ..}`  
  @MutationAction({ mutate: ['nombre de usuario', 'contraseña'] }) 
  async setPassenger(nombre: cadena) { 
    respuesta constante: cualquiera = espera solicitud(nombre); // La interfaz devuelve [{nombre :'Zhang三',contraseña:'123456'}] 
    //El valor de retorno aquí debe ser consistente con el nombre después de mutar arriba; 
    return { 
      nombre de usuario: respuesta[0].nombre, 
      contraseña: respuesta[0].contraseña, 
    } ; 
  } 
}

Pero para este método es necesario haber determinado los datos estructurales. Todavía usamos esto relativamente raramente.

Generalmente, this.context.commit se usa directamente en acción.

módulos de clase vuex

vuex-module-decorators y son cosas similares. Para un uso detallado, consulte: Decoradores de clase mecanografiados para módulos vuex | BestofVue

nada mas que decir.

Decoradores vue-class y vuex-module-decorators combinados

Es decir, la parte de datos de la tienda usa vuex-module-decorators y, dentro del componente, se usa vue-class para llamar a la tienda.

Es la colección de los dos primeros fragmentos de código anteriores.

Aunque @vue/composition-api escribe componentes de vue2, se puede actualizar fácilmente a vue3 en el futuro. Pero vue-class-component también tendrá una versión vue3 en el futuro.

A nivel personal, me siento muy incómodo con el aspecto de herencia de clases @vue/composition-api.

Consulte el artículo:
El estado de Typed Vuex: el enfoque más limpio    https://betterprogramming.pub/the-state-of-typed-vuex-the-cleanest-approach-2358ee05d230

Primera experiencia con Vue y TypeScript: usando Vuex (vuex-module-decorators)  Primera experiencia con Vue y TypeScript: usando Vuex (vuex-module-decorators) - Nuggets

Reimpreso del artículo de este sitio " Plan de transformación de Vuex en TSX: ¿Cómo lidiar con Vuex en el proyecto Vue2 de transformación de TS?" 》,
indique la fuente: Plan de transformación de Vuex en TSX: ¿Cómo lidiar con Vuex en el proyecto Vue2 de transformación de TS? - Resumen de la entrada de vue - Sitio web personal de Zhou Junjun

Supongo que te gusta

Origin blog.csdn.net/u012244479/article/details/123778697
Recomendado
Clasificación