真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vue與react的區(qū)別是什么-創(chuàng)新互聯(lián)

vue與react的區(qū)別是什么?相信有很多人都不太了解,今天小編為了讓大家更加了解vue與react的區(qū)別,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都發(fā)電機(jī)租賃小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)頁設(shè)計營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

Vue 和 React存在著較大的區(qū)別,例在添加、刪除和更改數(shù)據(jù),以 prop 形式從父組件到子組件傳遞數(shù)據(jù),以及通過事件監(jiān)聽器的形式將數(shù)據(jù)從子組件發(fā)送到父組件的實(shí)現(xiàn)方法中都存在較大差異

對于Vue 和 React框架想必大家都不陌生 ,這兩個都是目前非常有名的前端框架。但是對于它們二者之間的區(qū)別,很多人還不是太了解,今天將為大家詳細(xì)介紹這兩者之間的區(qū)別,希望可以幫助大家更好地理解它們兩者之間的差異。

vue與react的區(qū)別是什么

1. 目標(biāo)

構(gòu)建一個標(biāo)準(zhǔn)的待辦事項應(yīng)用程序,用來允許用戶添加和刪除列表中的項目。這兩個應(yīng)用程序都使用默認(rèn)的 CLI(command-line interface,命令行界面) 構(gòu)建,React 使用 create-react-app,Vue 使用 vue-cli

兩個應(yīng)用程序的外觀如下:

vue與react的區(qū)別是什么

兩個應(yīng)用程序的 CSS 代碼幾乎一樣,但這些代碼的位置存在差異,如下圖所示:

vue與react的區(qū)別是什么

從圖中可以看出它們的結(jié)構(gòu)幾乎完全相同。唯一的區(qū)別在于 React App 擁有三個 CSS 文件,而 Vue App 中沒有 CSS 文件。這是因?yàn)?/p>

React的 create-react-app 組件需要一個附帶文件來保存其樣式,而 Vue CLI 采用全包方法,其樣式在實(shí)際組件文件中聲明。

兩種不同的策略得到的結(jié)果是一樣的,相信開發(fā)者很快能夠掌握這兩種不同的策略。開發(fā)者可以根據(jù)自己的偏好做出選擇,你會聽到開發(fā)

社區(qū)關(guān)于如何構(gòu)建 CSS 的大量討論。以上,我們遵循兩個 CLI 列出了代碼結(jié)構(gòu)。

在我們進(jìn)一步討論之前,先快速看一下典型的 Vue 和 React 組件的外觀:

vue與react的區(qū)別是什么

現(xiàn)在開始,讓我們深入探究其中的細(xì)節(jié)!

2. 如何修改數(shù)據(jù)

修改數(shù)據(jù)就是把已經(jīng)存儲好的數(shù)據(jù)進(jìn)行更改。在這一點(diǎn)上,React 和 Vue 的處理方式有所區(qū)別。Vue 本質(zhì)上會創(chuàng)建一個數(shù)據(jù)對象,其中的數(shù)據(jù)可以自由更改;React 則創(chuàng)建一個狀態(tài)對象,更改數(shù)據(jù)需要一些額外的操作。React 之所以需要額外的操作有著自己的理由,稍后我會深入介紹。在此之前,我們先看看 Vue 中的數(shù)據(jù)對象和 React 中的狀態(tài)對象:

Vue 數(shù)據(jù)對象

vue與react的區(qū)別是什么

React 狀態(tài)對象

vue與react的區(qū)別是什么

從圖中可以看出,我們傳入了相同的數(shù)據(jù),但它們的標(biāo)記方法不同。因此,將初始數(shù)據(jù)傳遞到組件的方式非常相似。但正如我們提到的那樣,在兩個框架中更改數(shù)據(jù)的方式有所不同。

例:我們要修改一個名為 name: ‘Sunil’ 的數(shù)據(jù)元素

在 Vue 中,我們通過調(diào)用 this.name 來引用它。我們也可以通過調(diào)用 this.name ='John' 來更新它。這樣一來,名字就被成功改為了 “Jhon”。

在 React 中,我們通過調(diào)用 this.state.name 來引用同一段數(shù)據(jù)?,F(xiàn)在關(guān)鍵的區(qū)別在于,我們不能簡單地寫成 this.state.name='John',因?yàn)?React 有限制機(jī)制,它會阻止這種簡單的修改方式。在 React 中,我們需要這樣寫:this.setState({name:'John'})。

雖然與 Vue 中實(shí)現(xiàn)的結(jié)果一樣,但是 React 的操作更為繁瑣。原因在于Vue 在每次更新數(shù)據(jù)時默認(rèn)組合了自己的 setState 版本。而React 需要 setState,然后再更新其內(nèi)部數(shù)據(jù)。

現(xiàn)在我們知道如何更改數(shù)據(jù)了,接下來看看如何在待辦應(yīng)用程序中添加新的事項。

3. 添加新的待辦事項

React 的實(shí)現(xiàn)方法

createNewToDoItem = () => {
    this.setState( ({ list, todo }) => ({
      list: [
          ...list,
        {
          todo
        }
      ],
      todo: ''
    })
  );
};

在 React 中,我們的輸入字段有一個名為 value 的屬性。這個 value 通過使用幾個函數(shù)自動更新,這些函數(shù)綁定在一起以創(chuàng)建雙向綁定。我們通過在輸入字段上附加一個 onChange 事件監(jiān)聽器來創(chuàng)建這種形式的雙向綁定。如下所示:

只要輸入字段的值發(fā)生更改,handleInput 函數(shù)就會運(yùn)行。它通過將狀態(tài)對象設(shè)置為輸入字段中的任何內(nèi)容來更新狀態(tài)對象內(nèi)的 todo。handleInput 函數(shù)如下:

handleInput = e => {
  this.setState({
    todo: e.target.value
  });
};

現(xiàn)在,只要用戶按下頁面上的 + 按鈕添加新項目,createNewToDoItem 函數(shù)就會運(yùn)行 this.setState 并向其傳遞一個函數(shù)。該函數(shù)有兩個參數(shù),第一個是來自狀態(tài)對象的整個列表數(shù)組,第二個是由 handleInput 函數(shù)更新的todo。然后該函數(shù)返回一個新對象,該對象包含之前的整個列表,并在其末尾添加todo。整個列表是通過使用擴(kuò)展運(yùn)算符添加的。

最后,我們將 todo 設(shè)置為空字符串,它會自動更新輸入字段中的 value。

Vue 的實(shí)現(xiàn)方法

createNewToDoItem() {
    this.list.push(
        {
            'todo': this.todo
        }
    );
    this.todo = '';
}

在 Vue 中,我們的輸入字段中有一個名為 v-model 的句柄。這實(shí)現(xiàn)了**雙向綁定。輸入字段代碼如下:

V-Model 將輸入字段的內(nèi)容綁定到名為 toDoItem 的數(shù)據(jù)對象的鍵(key)上。當(dāng)頁面加載時,我們將 toDoItem 設(shè)置為空字符串,比如:todo:' '。如果已經(jīng)存在數(shù)據(jù),例如 todo:'添加文本處',輸入字段將加載添加文本處的輸入內(nèi)容。無論如何,將其作為空字符串,我們在輸入字段中鍵入的任何文本都會綁定到 todo。這實(shí)際上是雙向綁定(輸入字段可以更新數(shù)據(jù)對象,數(shù)據(jù)對象可以更新輸入字段)。

因此,回顧前面的 createNewToDoItem() 代碼塊,我們將 todo 的內(nèi)容存放到列表數(shù)組中 ,然后將 todo 改為空字符串。

4. 刪除待辦事項

React 的實(shí)現(xiàn)方法

deleteItem = indexToDelete => {
    this.setState(({ list }) => ({
      list: list.filter((toDo, index) => index !== indexToDelete)
    }));
};

盡管 deleteItem 函數(shù)位于 ToDo.js 文件中,但是從 ToDoItem.js 文件中引用它也很容易,將 deleteItem() 函數(shù)作為 上的 prop 傳遞:

這會將該函數(shù)傳遞給子組件,使其可以訪問。我們綁定了 this 并傳遞 key 參數(shù),當(dāng)用戶點(diǎn)擊刪除項時,函數(shù)通過 key 區(qū)分用戶點(diǎn)擊的是哪一條 ToDoItem 。然后,在ToDoItem 組件內(nèi)部,我們執(zhí)行以下操作:

-

想要引用位于父組件內(nèi)部的函數(shù),只需引用 this.props.deleteItem 即可。

Vue 的實(shí)現(xiàn)方法

onDeleteItem(todo){
  this.list = this.list.filter(item => item !== todo);
}

Vue 的實(shí)現(xiàn)方法稍有不同,我們需要做到以下三點(diǎn):

Step 1:首先,在元素上調(diào)用函數(shù):

-

Step 2:然后我們必須創(chuàng)建一個 emit 函數(shù),將其作為子組件的內(nèi)部方法(在本例中為ToDoItem.vue),如下所示:

deleteItem(todo) {
    this.$emit('delete', todo)
}

Step 3:之后,你會發(fā)現(xiàn),當(dāng)我們添加 ToDo.vue的 ToDoItem.vue 時,實(shí)際上引用了一個函數(shù):

這就是所謂的自定義事件監(jiān)聽器。它會監(jiān)聽任何使用 'delete' 字符串的觸發(fā)事件。一旦監(jiān)聽到事件,它會觸發(fā)一個名為 onDeleteItem 的函數(shù)。此函數(shù)位于 ToDo.vue 內(nèi)部,而不是 ToDoItem.vue。如前所述,該函數(shù)只是過濾數(shù)據(jù)對象內(nèi)的 todo 數(shù)組 ,以刪除被點(diǎn)擊的待辦事項。

在 Vue 示例中還需要注意的是,我們可以在 @click 偵聽器中編寫 $emit 部分,這樣更加簡單,如下所示:

-

如果你喜歡,這樣做可以把 3 步減少到 2 步。

React 中的子組件可以通過 this.props 訪問父函數(shù),而在 Vue 中,你需要從子組件中發(fā)出事件,父組件來收集事件。

5. 如何傳遞事件監(jiān)聽器

React 的實(shí)現(xiàn)方法

事件監(jiān)聽器處理簡單事件(比如點(diǎn)擊)非常直接。我們?yōu)榇k事項創(chuàng)建了點(diǎn)擊事件,用于創(chuàng)建新的待辦事項,代碼如下:

+

非常簡單,就像使用 vanilla JS 處理內(nèi)聯(lián) onClick 一樣。正如前文所述,只要按下回車按鈕,設(shè)置事件監(jiān)聽器就需要花費(fèi)更長的時間。這需要輸入標(biāo)簽處理 onKeyPress 事件,代碼如下:

該函數(shù)只要識別到'enter'鍵被按下,它就會觸發(fā) **createNewToDoItem** 函數(shù),代碼如下所示:

handleKeyPress = (e) => {
if (e.key === ‘Enter’) {
this.createNewToDoItem();
}
};

Vue 的實(shí)現(xiàn)方法

Vue 的事件監(jiān)聽器更加直接。我們只需要使用一個簡單的 @ 符號,就可以構(gòu)建出我們想要的事件監(jiān)聽器。例如,想要添加 click 事件監(jiān)聽器,代碼:

+

注意:@click 實(shí)際上是 v-on:click 的簡寫。Vue 事件監(jiān)聽器很強(qiáng)大,你可以為其選擇屬性,例如 .once 可以防止事件監(jiān)聽器被多次觸發(fā)。此外,它還包含很多快捷方式。按下回車按鈕時,React 就需要花費(fèi)更長的時間來創(chuàng)建事件監(jiān)聽器,從而創(chuàng)建新的 ToDo 項目。在 Vue,代碼如下:

6. 如何將數(shù)據(jù)傳遞給子組件

React 的實(shí)現(xiàn)方法

在 React 中,我們將 props 傳遞到子組件的創(chuàng)建處。比如:

此處我們向 ToDoItem 組件傳遞了兩個 prop。之后,我們可以在子組件中通過 this.props 引用它們

因此,想要訪問 item.todo prop,我們只需調(diào)用this.props.item 。

Vue 的實(shí)現(xiàn)方法

在 Vue 中,我們將 props 傳遞到子組件創(chuàng)建處的方式如下:

我們將它們傳遞給子組件中的 props 數(shù)組,如:props:['id','todo']。然后可以在子組件中通過名字引用它們。

7. 如何將數(shù)據(jù)發(fā)送回父組件

React 的實(shí)現(xiàn)方法

我們首先將函數(shù)傳遞給子組件,方法是在我們調(diào)用子組件時將其引用為 prop。

然后我們通過引用 this.props.whateverTheFunctionIsCalled,為子組件添加調(diào)用函數(shù),例如 onClick。然后,這將觸發(fā)父組件中的函

數(shù)。刪除待辦事項一節(jié)中詳細(xì)介紹了整個過程。

Vue 的實(shí)現(xiàn)方法

在子組件中我們只需編寫一個函數(shù),將一個值發(fā)送回父函數(shù)。在父組件中編寫一個函數(shù)來監(jiān)聽子組件何時發(fā)出該值的事件,監(jiān)聽到事件之后觸發(fā)函數(shù)調(diào)用。同樣,刪除待辦事項一節(jié)中詳細(xì)介紹了整個過程。

8. 總結(jié)

通過介紹了如何添加、刪除和更改數(shù)據(jù),以 prop 形式從父組件到子組件傳遞數(shù)據(jù),以及通過事件監(jiān)聽器的形式將數(shù)據(jù)從子組件發(fā)送到父組件等方法來理解React 和 Vue 之間的差異,希望通過本文的內(nèi)容有助于大家理解這兩個框架

關(guān)于vue與react的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。


本文題目:vue與react的區(qū)別是什么-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/dgjspi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部