日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue3搭建项目,tsx写法的注意事项

發(fā)布時間:2024/1/18 vue 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue3搭建项目,tsx写法的注意事项 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1.搭建一個空項目

?2.手動配置router+pinia

?3.使用jsx開發(fā),更像react? ? ??

4.jsx使用方法

5. 按需自動引入ElementPlus

?6.多環(huán)境搭建

gitee地址?

? https://gitee.com/liu--zicheng/vue3-templatehttps://gitee.com/liu--zicheng/vue3-template

1.搭建一個空項目

?npm init vite@latest

?選擇vue項目,然后回車。就會搭建一個空項目,其中一些router,pinia,jsx等需要自己配置。

?如果不想自己配置也可以根據(jù)vue3官網(wǎng)進行使用。

npm init vue@latest

?選取自己項目使用到的模塊進行配置。

?2.手動配置router+pinia

首先下載vue-router和pinia插件,然后在main.ts全局引入,并使用app.use進行全局注冊。

import { createApp } from "vue"; import "./style.css"; import App from "./App.vue"; import router from "./router"; import { createPinia } from "pinia";const app = createApp(App); app.use(createPinia); app.use(router); app.mount("#app");

?3.使用jsx開發(fā),更像react? ? ??

? ? ???yarn add @vitejs/plugin-vue-jsx

?然后需要在tsconfig.json中配置如下:

"jsx": "preserve", "jsxFactory": "h", "jsxFragmentFactory": "React.Fragment",

然后vite.config.ts修改如下:

import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import vueJsx from "@vitejs/plugin-vue-jsx"; // https://vitejs.dev/config/ export default defineConfig({plugins: [vue(), vueJsx()], });

4.jsx使用方法

? ? ? ? 注意:jsx中ref是不會自動解包的,但是template中是可以的?,其中一些原始寫法在jsx寫法中是有變化的。 比如:v-if 轉為 三元運算符、v-for 變?yōu)? map遍歷、{{}}=>{}

// jsx寫法,這只能創(chuàng)建無狀態(tài)的組件import { ref } from "vue";let v = ref<string>("我是jsx寫法");const renderDom = () => {return (<div><div>{v.value}</div><div>hellow tsx</div></div>); };export default renderDom;// 原始寫法<template><div>{{ a }}</div></template> <script setup lang="ts">let a = ref<string>("我不是jsx寫法");</script>

要想創(chuàng)建有狀態(tài)的組件,需要借助defineComponent和setup中間件,如果不使用setup,在內(nèi)部寫生命周期會警告,生命周期只能在setup中使用。tsx寫法不在支持v-for和v-if等指令,學過react會比較熟悉,v-if替換成三元運算符(true?’‘:’‘),v-for替換成如下。具體寫法如下:

import User from "@/api/user"; import {ref,onMounted,defineComponent,reactive,Ref,toRefs,isReactive, } from "vue"; import { ElButton } from "element-plus";export default defineComponent({setup() {let hh = ref("我是 HelloWorld 組件");let state1 = reactive<any>({data: [],});onMounted(async () => {await User.login("/api/query", { username: "llll" });const res = await User.req11("/api/data", { username: "llll" });state1.data.push(...res.data);});const change = () => {state1.data.push({ name: "7777" });};return () => {return (<><div>{hh.value}</div><ElButton onClick={change} type="primary">1231</ElButton>{state1.data.map((item: { name: string }) => {return <div>{item.name}</div>;})}</>);};}, });

在使用tsx時,我們不能想以前那樣,組件三部分代碼<template><script><style>?,F(xiàn)在需要在組件外部定義css或者scss或less樣式文件,命名:app.module.scss。

引入組件:import styles from '@/styles/app.module.scss'。

.module相當于css的作用域,避免全局污染。

使用:div class={styles.style}>內(nèi)容?</div>

5. 按需自動引入ElementPlus

? ? ? ? elementPlus官網(wǎng)推薦使用這種方式。但是樣式會丟失,然后我是將css通過script引入cdn鏈接,樣式才生效。大哥們知道為什么,給小弟說一聲。

<link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />

?6.多環(huán)境搭建

? ? ? ??在根目錄,不是在src目錄,否則不生效哦。其中也有許多的坑,莫名的報錯等。

? ? ? ?1.、用@引入組件時會報錯。解決方法:在vite.config.ts配置

resolve: {alias: {"@": resolve(__dirname, "src"),// extensions: [".js", ".json", ".ts"],// 使用路徑別名時想要省略的后綴名,可以自己 增減},},

?????????2、在使用import.meta.env.VITE_RES_URL,訪問自己定義的變量時,會爆紅。解決方法:需要在vite-env.d.ts中配置。

declare global {interface ImportMeta {env: Record<string, unknown>;} }

總結

以上是生活随笔為你收集整理的vue3搭建项目,tsx写法的注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。