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

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

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

Nov 05, 2024 am 02:03 AM

介紹

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

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

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

這就是我們將要看到的!

項(xiàng)目啟動(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 語(yǔ)言,提供路由系統(tǒng)和商店,甚至還有單元和端到端測(cè)試的空間!

默認(rèn)情況下,Vite 捆綁程序已安裝。這不是讓我不高興嗎???事實(shí)上,構(gòu)建速度很快,而且大多數(shù)時(shí)候,熱模塊替換 (HMR) 效果很好。

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

J

用于生產(chǎn)?只需輸入 npm run build 命令,檢查輸入后,項(xiàng)目將作為靜態(tài)文件導(dǎo)出到 dist 目錄中(在已激活 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

項(xiàng)目架構(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

在項(xiàng)目的建筑方面,我們特別發(fā)現(xiàn):

  • index.html 文件,帶有標(biāo)簽
    ;我們的整個(gè) Vue 應(yīng)用程序都嫁接在其上;
  • main.ts,依次創(chuàng)建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ǔ);
  • 一些配置和測(cè)試文件;
  • ...當(dāng)然還有 *.vue 文件,分為 組件(對(duì)應(yīng)于通用和可重用元素)和 視圖(對(duì)應(yīng)于高級(jí)元素)頁(yè))

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

Vue 文件的架構(gòu)

這是受官方網(wǎng)站啟發(fā)的代碼片段。它只是在單擊時(shí)更改文本的顏色,并在適用的情況下顯示短語(yǔ)“上面的文本是綠色的”,但它代表了 *.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),這是我在客戶項(xiàng)目的經(jīng)驗(yàn)中親身體驗(yàn)到的:

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

使用

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

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

簡(jiǎn)而言之,我發(fā)現(xiàn)這種一體式架構(gòu)非常令人愉快,但各個(gè)部分卻清晰分開。這可以讓您保持干凈的代碼,而且更加簡(jiǎn)潔。事實(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 世界中眾所周知的操作開始:在數(shù)據(jù)更新后智能地重新計(jì)算 HTML 渲染(或變量)。
有一個(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 的值發(fā)生變化時(shí)才計(jì)算 magicNumber。而且它是可驗(yàn)證的:消息“再次計(jì)算!”僅當(dāng)單擊不同的按鈕時(shí)才顯示在控制臺(tái)中。
因此,與 React 不同,無需在該函數(shù)中顯式指定要監(jiān)視的變量。

同樣,我們還發(fā)現(xiàn)了 watch 和 watchEffect ,它們分別允許你對(duì)組件的全部或部分屬性的變化做出反應(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() 允許我們?cè)诿看文承┳兞堪l(fā)生變化時(shí)觸發(fā)回調(diào)。

該功能的優(yōu)勢(shì)在于深入變量修改分析:Vue 甚至可以檢測(cè)到子對(duì)象深處的變化!

雙向同步

從父組件聲明屬性并將其傳遞給子組件是一個(gè)相當(dāng)重復(fù)的操作。也可以在子級(jí)和父級(jí)之間同步此值,例如在表單的輸入中。

此外,不要像這樣同時(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 宏來代替,這樣可以簡(jiǎn)化編寫:

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è),我連命名都可以省去!

和家長(zhǎng):

.
├── 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 循環(huán)

看到 v-model 后繼續(xù) v-for 讓我意識(shí)到 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)重復(fù) HTML 模式的一部分(此處為

  • 標(biāo)簽)。

    在 React 方面,需要使用 JSX 自己構(gòu)建每個(gè)元素,隨著組件的增長(zhǎng),代碼的可讀性會(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è)在我的項(xiàng)目開發(fā)過程中引起我注意的工具。

    VSCode 擴(kuò)展:Vue 官方

    我從顯而易見的開始,但是,是的,VSCode Vue(和其他 IDE)有一個(gè)擴(kuò)展,它添加了語(yǔ)法突出顯示、自動(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í)際上對(duì)應(yīng)于瀏覽器“性能”選項(xiàng)卡的一個(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)卡,但這對(duì)于復(fù)雜的路由非常有用。

    簡(jiǎn)而言之,對(duì)于調(diào)試,這里有您需要的一切,甚至更多!

    虛擬化

    幾乎毫不奇怪(但仍然有優(yōu)點(diǎn)?。€有一個(gè)用于 Vue 的 UI 庫(kù),它實(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

    這可以在項(xiàng)目啟動(dòng)或不需要太多圖形定制的項(xiàng)目上節(jié)省大量時(shí)間。

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

    結(jié)論

    對(duì)于從 React 遷移到 Vue 的體驗(yàn)我們能說些什么?

    首先,從代碼的角度來看,與 React 相比,我想說 Vue 庫(kù)是:

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

    但是,由于其代碼更多地用 JSX 編寫,我發(fā)現(xiàn) React 仍然比 Vue 更具互操作性、更具編程性和更明確,并且具有更好的 linter 穩(wěn)定性。

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

    那么 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)用場(chǎng)景略有不同,但我更喜歡依賴 React 可靠的類型系統(tǒng)和更靈活的代碼。但也許 Vue 的下一個(gè)版本及其工具會(huì)改變我的想法?

    你呢,你的反饋是什么?

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

    本站聲明
    本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

    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)頁(yè)開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)代碼編輯軟件(SublimeText3)

    在JavaScript中使用哪些評(píng)論符號(hào):一個(gè)明確的解釋 在JavaScript中使用哪些評(píng)論符號(hào):一個(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評(píng)論的最終指南:增強(qiáng)代碼清晰度 JavaScript評(píng)論的最終指南:增強(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ǔ)言,各自適用于不同的應(yīng)用場(chǎng)景。Java用于大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用于網(wǎng)頁(yè)開發(fā)。

    JavaScript評(píng)論:簡(jiǎn)短說明 JavaScript評(píng)論:簡(jiǎn)短說明 Jun 19, 2025 am 12:40 AM

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

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

    評(píng)論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對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

    See all articles