博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vuex中使用typescript
阅读量:2121 次
发布时间:2019-04-30

本文共 4327 字,大约阅读时间需要 14 分钟。

 uniapp+ vuex + typescript 练手

一。刚开始使用的方式(很多类型没有明确 ,总是觉的没typescript的样子)

1.store/index.ts 文件

import Vue from 'vue';import Vuex from 'vuex';import fishLan from './module/fishLan';Vue.use(Vuex);const store = new Vuex.Store({  modules: {    fishLan  },  state: {    nickname: '未设置',  },  mutations: {    change: function(state: Global.IState, nickname: string): void {      state.nickname = nickname;    },  },});export default store;

2.fishLan.ts 

import request from '../../utils/request';import api from '../../utils/api';export default {    namespaced: true,    state: {        swiperList: [],        entranceList: [],        coursesList: []    },    getters: {},    mutations: {        setSwiperItem(state: any,swiperData: string){           state.swiperList = swiperData;        },        setEntranceList(state: any , list: string){            state.entranceList = list;        },        setcoursesList(state:any, courses:string){            state.coursesList = courses;        }    },    actions: {        async setOpenId(context:any){            const {data } = await request.post(api.getOpenId,{});            uni.setStorage({                key: 'OpenID ',                data: data.OpenID,				            });            uni.setStorage({                key: 'session_key ',                data: data.session_key,				            });        },        async getBannerData(context:any){            const {data } = await request.post(api.getBannerData,{});            context.commit('setSwiperItem', data);        },        async getCourses(context:any){            const {data } = await request.post(api.getCourses,{});            context.commit('setcoursesList', data);        },        async getEntranceData(context:any){            const data = await request.post(api.getEntrance,{});            return data;        }    }}

二。进一步修改后完善后

1.1.store/index.ts 文件

import Vue from 'vue';import Vuex, { StoreOptions } from 'vuex';import {fishLan} from './module/fishLan';import { RootState } from './rootTypes'; //是root节点下对应的state的类型Vue.use(Vuex);const store: StoreOptions
= { modules: { fishLan }, state: { nickname: '未设置', }, mutations: { change(state, nickname) { state.nickname = nickname; } }}export default new Vuex.Store
(store)

2.rootTypes.ts

//每个state 都有对应的interface,用于明确该state的类型export interface RootState {    nickname: string}

3.

import { MutationTree, ActionTree, Module } from 'vuex';import request from '../../utils/request';import api from '../../utils/api';import { RootState } from './../roottypes';//接口export interface fishLanState {    swiperList: any,    entranceList: any,    coursesList: any}//重新赋值const state: fishLanState = {    swiperList: [],    entranceList: [],    coursesList: []}const mutations:MutationTree
 = {    setSwiperItem(state,swiperData){        state.swiperList = swiperData;     },     setEntranceList(state, list){         state.entranceList = list;     },     setcoursesList(state, courses){         state.coursesList = courses;     }}const actions:ActionTree
 ={    async setOpenId(){        const {data } = await request.post(api.getOpenId,{});        uni.setStorage({            key: 'OpenID ',            data: data.OpenID,                      });        uni.setStorage({            key: 'session_key ',            data: data.session_key,                     });    },    async getBannerData({commit}){        const {data } = await request.post(api.getBannerData,{});        commit('setSwiperItem', data);    },    async getCourses({commit}){        const {data } = await request.post(api.getCourses,{});        commit('setcoursesList', data);    },    async getEntranceData(){        const data = await request.post(api.getEntrance,{});        return data;    }}export const fishLan: Module
 = {    namespaced: true,    state,    mutations,    actions}

三。页面中的调用

import { State, Action, Mutation, namespace } from "vuex-class";//接近vuex中的写法@State(state => state.fishLan.swiperList) private swiperList!: string;@Mutation('fishLan/setSwiperItem') private setSwiperItem!: Function;@Action('fishLan/getBannerData') private getBannerData!: Function;//通过namescpace@Action("getBannerData", { namespace: "fishLan" })getBannerData: any;@Mutation("getBannerData", { namespace: "fishLan" })getBannerData: any;

 

转载地址:http://mxurf.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
查看>>
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>