国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 我嘗試從 React.js 切換到 Vue.js

我嘗試從 React.js 切換到 Vue.js

Nov 05, 2024 am 02:03 AM

介紹

幾年前,像許多其他人一樣,我對 React.js 前端庫的鉤子和功能組件的到來感到「興奮」。他們提供了一種全新的開發(fā)方式,編寫的程式碼比使用 Components 類別少得多。我真的被迷住了,並且迷上了很長一段時(shí)間。

今天我不得不選擇 Vue.js 框架來滿足一個(gè)全新的客戶端專案的需求。在這個(gè)專案結(jié)束時(shí),我對自己說,這是為您作為這個(gè)框架的新用戶提供反饋的機(jī)會(huì)!

那麼,這種技能的提升是否符合 Vue.js 的惡名?
如今,使用 Vue 開發(fā)前端比使用 React 更好嗎?

這就是我們將要看到的!

專案啟動(dòng)

鍋爐板

誰說開始一個(gè)項(xiàng)目,就說尋找一個(gè)好的樣板來節(jié)省我們數(shù)小時(shí),甚至數(shù)天的辛苦配置!
不需要看得太遠(yuǎn),npm create vue@latest 指令很大程度上滿足了我的需求:

? Project name: … myproject-vue
? Add TypeScript? … No / Yes
? Add JSX Support? … No / Yes
? Add Vue Router for Single Page Application development? … No / Yes
? Add Pinia for state management? … No / Yes
? Add Vitest for Unit Testing? … No / Yes
? Add an End-to-End Testing Solution? ? Playwright
? Add ESLint for code quality? … No / Yes
? Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) ? No / Yes

已經(jīng)支援 Typescript 語言,提供路由系統(tǒng)和商店,甚至還有單元和端對端測試的空間!

預(yù)設(shè)情況下,Vite 捆綁程式已安裝。這不是讓我不高興嗎! ?事實(shí)上,建造速度很快,而且大多數(shù)時(shí)候,熱模組替換 (HMR) 效果很好。

一點(diǎn) npm run dev 來啟動(dòng)本機(jī)開發(fā)伺服器,然後!它已經(jīng)在瀏覽器中運(yùn)行了!

J

用於生產(chǎn)?只需輸入 npm run build 命令,檢查輸入後,項(xiàng)目將作為靜態(tài)檔案匯出到 dist 目錄中(在已啟動(dòng) Typescript 的情況下):

vite v5.2.11 building for production...
? 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
? built in 591ms

專案架構(gòu)

.
├── README.md
├── e2e/
├── index.html
├── package.json
├── public/
├── src/
│   ├── App.vue
│   ├── assets/
│   ├── components/
│   │   ├── HelloWorld.vue
│   │   ├── TheWelcome.vue
│   │   ├── WelcomeItem.vue
│   │   ├── __tests__/
│   │   └── icons/
│   ├── main.ts
│   ├── router/
│   │   └── index.ts
│   ├── stores/
│   │   └── counter.ts
│   └── views/
│       ├── AboutView.vue
│       └── HomeView.vue
├── tsconfig.json
└── vite.config.ts

在專案的建築方面,我們特別發(fā)現(xiàn):

  • index.html 文件,附標(biāo)籤
    ;我們的整個(gè) Vue 應(yīng)用程式都嫁接在其上;
  • main.ts,依序建立App元件、router和store:
? Project name: … myproject-vue
? Add TypeScript? … No / Yes
? Add JSX Support? … No / Yes
? Add Vue Router for Single Page Application development? … No / Yes
? Add Pinia for state management? … No / Yes
? Add Vitest for Unit Testing? … No / Yes
? Add an End-to-End Testing Solution? ? Playwright
? Add ESLint for code quality? … No / Yes
? Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) ? No / Yes
  • 純.ts文件,用於管理路由和儲(chǔ)存;
  • 一些設(shè)定和測試文件;
  • ...當(dāng)然還有*.vue 文件,分為組件(對應(yīng)於通用和可重用元素)和視圖(對應(yīng)於高級元素)頁)

簡而言之,檔案架構(gòu)相當(dāng)簡單,並且與 React 相對相似,即使在樣板檔案中檢查了很多選項(xiàng)。
到目前為止,React 還沒有什麼真正新鮮的東西。這時(shí)就會(huì)出現(xiàn)顯著差異!

Vue 檔案的架構(gòu)

這是受官方網(wǎng)站啟發(fā)的程式碼片段。它只是在單擊時(shí)更改文字的顏色,並在適用的情況下顯示短語“上面的文字是綠色的”,但它代表了 *.vue 檔案的典型架構(gòu):

vite v5.2.11 building for production...
? 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
? built in 591ms

注意事件與@click的綁定,條件顯示與v-if,以及CSS中與v-bind()的綁定。

程式碼分為 3 個(gè)截然不同的部分:

  • 腳本:控製程式碼;
  • 模板:HTML結(jié)構(gòu);
  • style:CSS 樣式表。

這三個(gè)部分永遠(yuǎn)不會(huì)混合? .
這有幾個(gè)優(yōu)點(diǎn),這是我在客戶專案的經(jīng)驗(yàn)中親身體驗(yàn)到的:

  • HTML 結(jié)構(gòu)清晰、固定,並且具有非常聲明式風(fēng)格 - 一切都在那裡,甚至是有條件顯示的標(biāo)籤;
  • 邏輯部分與顯示部分分離良好;
  • 可以就地編寫純CSS,直接連結(jié)到元件,無需安裝第三方函式庫;
  • 儘管樣式分離,您仍然可以在 CSS 中插入變數(shù)。

使用

小缺點(diǎn):先驗(yàn)沒有自動(dòng) CSS 填滿。因此,你應(yīng)該瞄準(zhǔn)像 vue-emotion 這樣的書店。

從我的角度來看,我發(fā)現(xiàn)這種「all-in-JS」函式庫有點(diǎn)破壞了 Vue 提供的架構(gòu),而且顯然,瀏覽器特定的 CSS 屬性在當(dāng)今時(shí)代已經(jīng)很少見了。 因此,de Vue 通常是自給自足的。

簡而言之,我發(fā)現(xiàn)這種一體式架構(gòu)非常令人愉快,但各個(gè)部分卻清晰分開。這可以讓您保持乾淨(jìng)的程式碼,而且更簡潔。事實(shí)上,「業(yè)務(wù)邏輯/顯示/樣式」這三個(gè)部分的同時(shí)存在通常會(huì)鼓勵(lì)您將程式碼重新劃分為更小的模組,從而劃分為更小的檔案。

現(xiàn)在,如果我們仔細(xì)看看 Vue.js API 本身會(huì)怎麼樣?

Vue.js API

在這裡,我不會(huì)向您提供我遇到的 Vue.js API 的所有元素的詳盡列表,而是只提供一些我發(fā)現(xiàn)相當(dāng)代表 Vue 邏輯的非常具體的元素。

(重新)計(jì)算的值

讓我們從 React 世界中眾所周知的操作開始:在資料更新後智慧地重新計(jì)算 HTML 渲染(或變數(shù))。
有一個(gè)非常直觀的compute()函數(shù),它受益於記憶系統(tǒng)(一種「快取」),以避免每次重新計(jì)算輸出值:

J

? Project name: … myproject-vue
? Add TypeScript? … No / Yes
? Add JSX Support? … No / Yes
? Add Vue Router for Single Page Application development? … No / Yes
? Add Pinia for state management? … No / Yes
? Add Vitest for Unit Testing? … No / Yes
? Add an End-to-End Testing Solution? ? Playwright
? Add ESLint for code quality? … No / Yes
? Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) ? No / Yes

這裡僅當(dāng) PushBtn 的值改變時(shí)才計(jì)算 magicNumber。而且它是可驗(yàn)證的:訊息「再次計(jì)算!」僅在單擊不同的按鈕時(shí)才顯示在控制臺中。
因此,與 React 不同,無需在該函數(shù)中明確指定要監(jiān)視的變數(shù)。

同樣,我們還發(fā)現(xiàn)了 watch 和 watchEffect ,它們分別允許你對組件的全部或部分屬性的變化做出反應(yīng),就像 React 中的 useEffect 一樣:

vite v5.2.11 building for production...
? 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
? built in 591ms

J

只需點(diǎn)擊數(shù)字修改按鈕即可增加「手錶」計(jì)數(shù)器。
然後,watch() 允許我們在每次某些變數(shù)發(fā)生變化時(shí)觸發(fā)回調(diào)。

此功能的優(yōu)勢在於深入變數(shù)修改分析:Vue 甚至可以偵測到子物件深處的變化!

雙向同步

從父元件聲明屬性並將其傳遞給子元件是相當(dāng)重複的操作。也可以在子級和父級之間同步此值,例如在表單的輸入中。

此外,不要像這樣同時(shí)管理屬性和基於事件的更新回調(diào):

? Project name: … myproject-vue
? Add TypeScript? … No / Yes
? Add JSX Support? … No / Yes
? Add Vue Router for Single Page Application development? … No / Yes
? Add Pinia for state management? … No / Yes
? Add Vitest for Unit Testing? … No / Yes
? Add an End-to-End Testing Solution? ? Playwright
? Add ESLint for code quality? … No / Yes
? Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) ? No / Yes

…可以使用 DefineModel 巨集來代替,這樣可以簡化寫:

vite v5.2.11 building for production...
? 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
? built in 591ms

短多了! ?再說了,模型只有一個(gè),我連命名都可以省去!

和家長:

.
├── README.md
├── e2e/
├── index.html
├── package.json
├── public/
├── src/
│   ├── App.vue
│   ├── assets/
│   ├── components/
│   │   ├── HelloWorld.vue
│   │   ├── TheWelcome.vue
│   │   ├── WelcomeItem.vue
│   │   ├── __tests__/
│   │   └── icons/
│   ├── main.ts
│   ├── router/
│   │   └── index.ts
│   ├── stores/
│   │   └── counter.ts
│   └── views/
│       ├── AboutView.vue
│       └── HomeView.vue
├── tsconfig.json
└── vite.config.ts

J

for 迴圈

看到 v-model 後繼續(xù) v-for 讓我意識到 Vue.js 開始透過隱式程式碼引入很多「魔法」:

import './assets/main.css';

import { createApp } from 'vue';
import { createPinia } from 'pinia';

import App from './App.vue';
import router from './router';

const app = createApp(App); // composant racine

app.use(createPinia()); // store
app.use(router); // routage des pages front

app.mount('#app');

結(jié)果:

J

正如人們所期望的,v-for 指令因此可以為可迭代的每個(gè)元素自動(dòng)重複 HTML 模式的一部分(此處為

  • 標(biāo)籤)。

    在 React 方面,需要使用 JSX 自己建立每個(gè)元素,隨著元件的成長,程式碼的可讀性會(huì)降低:

    <script setup>
      import { ref } from 'vue';
    
      const color = ref('green');
    
      function toggleColor() {
        color.value = color.value === 'green' ? 'blue' : 'green';
      }
    </script>
    
    <template>
      <p class="main-text" @click="toggleColor">
        Cliquez sur ce texte pour changer de couleur.
      </p>
      <p v-if="color === 'green'">Le texte ci-dessus est vert.</p>
    </template>
    
    <style scoped>
      .main-text {
        color: v-bind(color);
      }
    </style>
    

    就我個(gè)人而言,從程式碼整潔度方面我比較喜歡Vue的結(jié)構(gòu),只要不需要調(diào)試即可。 ?
    順便問一下,既然我們談?wù)摰氖钦{(diào)試,那麼 Vue 生態(tài)系統(tǒng)工具呢?

    開發(fā)工具

    這裡有 3 個(gè)在我的專案開發(fā)過程中引起我注意的工具。

    VSCode 擴(kuò)充:Vue 官方

    我從顯而易見的開始,但是,是的,VSCode Vue(和其他 IDE)有一個(gè)擴(kuò)展,它添加了語法突出顯示、自動(dòng)完成、片段等。必備!

    但是,我注意到著色和自動(dòng)完成方面存在一些不穩(wěn)定,有時(shí)有點(diǎn)反復(fù)無常? ,在這裡我能夠欣賞到 React 方面更大的穩(wěn)定性。

    Vue.js 開發(fā)工具

    就像 React Developer Tools 瀏覽器插件一樣,還有 Vue.js devtools 插件,我必須承認(rèn),它已經(jīng)提供得很好:

    J

    有 4 個(gè)選項(xiàng)卡:

    • 組件,我們可以在其中觀察,也可以修改組件的狀態(tài);
    • Timeline,它允許你記錄事件和元件渲染時(shí)間,它實(shí)際上對應(yīng)於瀏覽器「效能」標(biāo)籤的一個(gè)版本,但專注於 Vue;
    • Pinia,它允許您直接觀察和修改標(biāo)準(zhǔn)儲(chǔ)存的狀態(tài)? ,我發(fā)現(xiàn)特別受歡迎的現(xiàn)成整合;
    • 路線,您可以在其中列出不同的道路及其活動(dòng)- 這是一個(gè)我發(fā)現(xiàn)在我的中等規(guī)模項(xiàng)目上有點(diǎn)花哨的選項(xiàng)卡(特別是因?yàn)樵撔畔⑴c“組件”的信息不是很冗餘" 選項(xiàng)卡,但這對於複雜的路由非常有用。

    簡而言之,對於調(diào)試,這裡有您需要的一切,甚至更多!

    虛擬化

    幾乎毫不奇怪(但仍然有優(yōu)點(diǎn)?。?,還有一個(gè)用於 Vue 的 UI 庫,它實(shí)現(xiàn)了 Google 的 Material Design,並且還提供了標(biāo)準(zhǔn)圖標(biāo)列表:Vuetify。

    ? Project name: … myproject-vue
    ? Add TypeScript? … No / Yes
    ? Add JSX Support? … No / Yes
    ? Add Vue Router for Single Page Application development? … No / Yes
    ? Add Pinia for state management? … No / Yes
    ? Add Vitest for Unit Testing? … No / Yes
    ? Add an End-to-End Testing Solution? ? Playwright
    ? Add ESLint for code quality? … No / Yes
    ? Add Prettier for code formatting? … No / Yes
    ? Add Vue DevTools 7 extension for debugging? (experimental) ? No / Yes
    

    J

    這可以在專案啟動(dòng)或不需要太多圖形自訂的專案上節(jié)省大量時(shí)間。

    但一如既往,我建議密切注意這種高級庫的渲染性能。庫的配置容量往往是在其他地方付費(fèi)的!

    結(jié)論

    對於從 React 遷移到 Vue 的體驗(yàn)我們能說些什麼?

    首先,從程式碼的角度來看,與 React 相比,我想說 Vue 函式庫是:

    • 更結(jié)構(gòu)化;
    • 更具聲明性 ;
    • 更簡潔。

    但是,由於其程式碼更能以 JSX 編寫,我發(fā)現(xiàn) React 仍然比 Vue 更具互通性、更具程式性和更明確,並且具有更好的 linter 穩(wěn)定性。

    在開發(fā)環(huán)境和社區(qū)方面,Vue 已經(jīng)具備了確保高效開發(fā)到生產(chǎn)的所有優(yōu)勢。

    那麼 Vue 上的這種技能提升是否名副其實(shí)?我會(huì)說是的。我發(fā)現(xiàn)這個(gè)學(xué)習(xí)曲線很有效,如果有機(jī)會(huì),我會(huì)繼續(xù)與 Vue 一起發(fā)展。

    最後,現(xiàn)在用 Vue 開發(fā)前端比用 React 更好嗎?
    從完全個(gè)人的角度來看,我認(rèn)為不是。儘管 Vue 和 React 的應(yīng)用程式場景略有不同,但我更喜歡依賴 React 可靠的類型系統(tǒng)和更靈活的程式碼。但也許 Vue 的下一個(gè)版本及其工具會(huì)改變我的想法?

    你呢,你的回饋是什麼?

  • 以上是我嘗試從 React.js 切換到 Vue.js的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

    本網(wǎng)站聲明
    本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強(qiáng)大的PHP整合開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    在JavaScript中使用哪些評論符號:一個(gè)明確的解釋 在JavaScript中使用哪些評論符號:一個(gè)明確的解釋 Jun 12, 2025 am 10:27 AM

    在JavaScript中,選擇單行註釋(//)還是多行註釋(//)取決於註釋的目的和項(xiàng)目需求:1.使用單行註釋進(jìn)行快速、內(nèi)聯(lián)的解釋;2.使用多行註釋進(jìn)行詳細(xì)的文檔說明;3.保持註釋風(fēng)格的一致性;4.避免過度註釋;5.確保註釋與代碼同步更新。選擇合適的註釋風(fēng)格有助於提高代碼的可讀性和可維護(hù)性。

    JavaScript評論的最終指南:增強(qiáng)代碼清晰度 JavaScript評論的最終指南:增強(qiáng)代碼清晰度 Jun 11, 2025 am 12:04 AM

    是的,javascriptcommentsarenectary和shouldshouldshouldseffectional.1)他們通過codeLogicAndIntentsgudedepleders,2)asevitalincomplexprojects,和3)handhanceClaritywithOutClutteringClutteringThecode。

    Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

    Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

    JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

    JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

    掌握J(rèn)avaScript評論:綜合指南 掌握J(rèn)avaScript評論:綜合指南 Jun 14, 2025 am 12:11 AM

    評論arecrucialinjavascriptformaintainingclarityclarityandfosteringCollaboration.1)heelpindebugging,登機(jī),andOnderStandingCodeeVolution.2)使用林格forquickexexplanations andmentmentsmmentsmmentsmments andmmentsfordeffordEffordEffordEffordEffordEffordEffordEffordEddeScriptions.3)bestcractices.3)bestcracticesincracticesinclud

    JavaScript數(shù)據(jù)類型:深度潛水 JavaScript數(shù)據(jù)類型:深度潛水 Jun 13, 2025 am 12:10 AM

    JavaScripthasseveralprimitivedatatypes:Number,String,Boolean,Undefined,Null,Symbol,andBigInt,andnon-primitivetypeslikeObjectandArray.Understandingtheseiscrucialforwritingefficient,bug-freecode:1)Numberusesa64-bitformat,leadingtofloating-pointissuesli

    JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

    JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

    如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

    JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

    See all articles