vue-cli 3+typescriptに基づくtsx開発テンプレート構築過程を共有する。
8520 ワード
プロジェクトの作成
vue-tsx-support
前のステップでは
まず
最後に、
このように簡単なtsxスタイルのvueプロジェクトを完成しました。
vue mixins
インストール state.ts getter.ts muttionn-type.ts muttions.ts actions.ts 簡単な例を作成し、Vuexにuser情報を格納する:
Ps:初めて文章を書くので、どうしても緊張します。問題があれば、討論を歓迎します。ありがとうございます
最終的なtemplateはここですにあります。
締め括りをつける
ここで、vue-cli 3+typescriptに基づくtsx開発テンプレートを構築する記事について紹介します。これに関連して、vue typescriptテンプレートの内容は以前の文章を検索してください。または以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。
vue-cli3+
を用いてts
に基づくテンプレートを作成する。vue-tsx-support
前のステップでは
ts
ベースのvue
テンプレートが作成されましたが、開発方式は相変わらずtemplate
のように、script
中のjs
部分をts
に変更して書いています。次に、テンプレート方式をtsxに変更します。ここでは、1つのライブラリ--vue-tsx-supportを借りる必要があります。まず
vue-tsx-support
をインストールします。
npm install vue-tsx-support --save
# or
yarn add vue-tsx-support
インストールが終わったら、私達は私達のファイルに小さな変更をしたいです。まず、メインエントランスファイルmain.ts
に導入します。
npm install vue-tsx-support --save
# or
yarn add vue-tsx-support
src/shims-tsx.d.ts
ファイルを削除し、vue-tsx-support/enable-check
と重複衝突を避ける。最後に、
vue.config.js
ファイルのconfigureWebpack
属性の下にresolve
を追加します。
// vue.config.js
module.exports = {
// ...
configureWebpack: {
resolve: {
extensions: [".js", ".vue", ".json", ".ts", ".tsx"] // ts tsx
}
}
}
これでいいです。これから開発が始まります。/components
の下に新しいファイルbutton.tsx
を作成します。次に、tsx
スタイルのvue
コードを書き始めます。
// components/button/button.tsx
import { Component, Prop } from "vue-property-decorator";
import * as tsc from "vue-tsx-support";
interface ButtonClick {
(value: string): void
}
interface ButtonProps {
text: string;
btnClick?: ButtonClick
}
@Component
export default class ZButton extends tsc.Component<ButtonProps> {
@Prop() text!: string;
public btnClick(value: string): void {
console.log("value is: ", value);
}
protected render() {
return (
<div>
<button onClick={() => this.btnClick("click")}>{this.text}</button>
</div>
)
}
}
これで簡単なtsxコンポーネントが完成しました。次に私達は元のHome.vue
を書き換えてHome.tsx
になります。
// views/Home.tsx
import { Component, Vue } from "vue-property-decorator";
import { Component as tsc } from "vue-tsx-support";
import ZButton from "@/components/button/button.tsx";
@Component
export default class HomeContainer extends tsc<Vue> {
protected render() {
return <Zbutton text=" !"></Zbutton>;
}
}
そして運転して、以下の効果が見られます。このように簡単なtsxスタイルのvueプロジェクトを完成しました。
vue mixins
mixins/index.ts
を新規作成し、index.ts
にvue mixin
を記入します。
// mixins/index.ts
import { Vue, Component } from "vue-property-decorator";
//
// mixin
declare module "vue/types/vue" {
interface Vue {
mixinText: string;
showMixinText(): void;
}
}
@Component
export default class MixinTest extends Vue {
public mixinText: string = " mixin";
public showMixinText() {
console.log(this.mixinText);
}
}
次に、component/button/button.tsx
で使用される。
// component/button/button.tsx
import { Component, Prop } from "vue-property-decorator";
import * as tsc from "vue-tsx-support";
import MixinTest from "@/mixins";
interface ButtonClick {
(value: string): void;
}
interface ButtonProps {
text: string;
btnClick?: ButtonClick;
}
// Component mixin
@Component({
mixins: [MixinTest]
})
export default class ZButton extends tsc.Component<ButtonProps> {
@Prop() text!: string;
public btnClick(value: string): void {
console.log("value is: ", value);
}
// mixin
protected render() {
return (
<div>
<button onClick={() => this.showMixinText()}>{this.text}</button>
</div>
);
}
}
vuexvuex
のts
変換には、vuex-classに基づく方法と、vue-module-decoratorsに基づく方法の2つがある。ここで使っているのはvuex-class
です。インストール
vuex-class
:
npm install vue-class --save
#or
yarn add vuex-class
systemのmoduleを新たに作成し、systemのstoreに対してそれぞれのファイルを作成します。
// store/modules/system/state.ts
interface SystemState {
user: Object
}
const state: SystemState = {
user: {}
}
export default state;
// store/modules/system/mutation-type.ts
interface SystemMutationType {
SET_USER_INFO: String;
}
const Mutation_Type: SystemMutationType = {
SET_USER_INFO: "SET_USER_INFO"
}
export default Mutation_Type;
// store/modules/system/mutation.ts
import type from "./mutation-type";
const mutation: any = {
[type.SET_USER_INFO as string](state: SystemState, user: Object) {
state.user = user;
}
}
export default mutation;
import type from "./mutation-type";
import { Commit } from "vuex";
export const cacheUser = (context: { commit: Commit }, user: Object) => {
context.commit(type.SET_USER_INFO as string, user);
}
そしてsystemの入口ファイルindex.tsを作成してこれらを外に投げます。
// store/modules/system/index.ts
import state from "./state";
import mutations from "./mutation";
import * as actions from "./action";
import * as getters from "./getter";
export default {
namespaced: true,
state,
getters,
mutations,
actions
};
最後にstoreの入口ファイルでmoduleを引用します。
// store/index.ts
import Vue from "vue";
import Vuex from "vuex";
import system from "./modules/system";
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
system
}
});
次に、私たちはコンポーネントbutton.tsx
に行って使用する。
// components/button/button.tsx
import { Component, Prop } from "vue-property-decorator";
import * as tsc from "vue-tsx-support";
// store
import { namespace } from "vuex-class";
// namespace(module name) store
const systemStore = namespace("system");
@Component
export default class ZButton extends tsc.Component<ButtonProps> {
@Prop() text!: string;
// store state action getter mutation
@systemStore.State("user") user!: Object;
@systemStore.Action("cacheUser") cacheUser: any;
public btnClick(value: string): void {
console.log("value is: ", value);
// store action user
// state user vue-tools
this.cacheUser({ name: " ", phone: "13333333333" });
}
// mixin
protected render() {
return (
<div>
<button onClick={() => this.btnClick()}>{this.text}</button>
</div>
);
}
}
Tips:typescriptに基づくvuexは、まだより優れた方法を考えています。Ps:初めて文章を書くので、どうしても緊張します。問題があれば、討論を歓迎します。ありがとうございます
最終的なtemplateはここですにあります。
締め括りをつける
ここで、vue-cli 3+typescriptに基づくtsx開発テンプレートを構築する記事について紹介します。これに関連して、vue typescriptテンプレートの内容は以前の文章を検索してください。または以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。