這幾天國外關於 Vue 新 API 的一些爭論

本文只是翻譯 :) 掘金的排版比知乎好太多了。vue

首先是 Reddit 上有人發帖。git

標題:Vue 3 將大變——目前的語法會被棄用,組合函數將最終做爲建立組件的惟一方式github

內容:編程

尤雨溪幾天前發佈了一篇 RFC(意見徵求稿),介紹了 Vue 3 裏基於函數的 API。
許多咱們正在使用的特性都會被棄用,諸如 data、computed、methods、watch、mixin、extends 和生命週期函數。Vue 組件主要由一個叫作 setup() 的函數構成,這個函數會返回全部的 method、計算屬性和監聽器。api

若是你想繼續使用舊版功能,Vue 會提供一個兼容版本。ide

文章裏還說:函數式編程

新的 API 和 2.x 的 API 理論上徹底兼容(只是多了一個 setup()選項) 。可是,新 API 的引入實際上會讓至關一部分的舊選項長遠來講變得沒有必要。若是可以去掉對這些舊選項的支持,能夠得到至關的代碼尺寸和性能提高。函數

所以,3.0 咱們計劃提供兩個不一樣的版本:
兼容版本:同時支持新 API 和 2.x 的全部選項;
標準版本:只支持新 API 和部分 2.x 選項。post

更新:
他們澄清說舊版 API 將會和 Vue 3.x 共存。Vue 4.x 會不會刪掉舊版 API 就不肯定了
看起來尤雨溪讀了網上了評論,他聲稱個人這篇帖子是不許確的,與此同時他卻把原文的措辭修改了。以前的「兼容版本」被改成「標準版本」,以前的「標準版本」被改成「輕量版本」
你能讀你們的評論而且聽取你們的意見,這很好。可是你不該該改寫你的文章,而後說我誤解你了。性能


後續,Vue 團隊在 hacker news 上發了一篇迴應,翻譯以下:

我是 Vue 的團隊領導。
相關的帖子裏有不少誤解,因此咱們須要澄清一下:

  • 新的 API 徹底是額外加到 Vue 2.x 裏的,不會有任何 break change。
  • Vue 3.0 會有一個標準版本,包含新 API 和舊 API,同時會額外提供一個輕量版本,這個版本會刪除一些舊 API,以使 Vue 更小更快。
  • 這只是一個「意見徵求稿」,全部 API 都沒有蓋棺定論。你能夠留下本身的建議,咱們並非立刻就會發布 Vue 3.0。
    更多詳情請看這裏:vuejs/rfcs

迴應文完,接下來是這篇文章下面的評論。

lwansbrough 評論到:

尤你好,雖然新 API 的提案澄清了這些變化被定爲Vue 3 的可選項,但 Vue 團隊的長期重點尚不清楚,新 API 看起來就像是爲 Vue 4 設置的誘餌。

問題的關鍵在於:當 Vue 2 發佈時,咱們以爲 Vue 2 的設計相比於 React 足夠簡潔,因此上了 Vue 2 的車。而當時 React 的重點主要是函數式和基於性能的UI開發方法(現現在 React 依然在關注這些)。

若是你有一個超級專一於性能,並不是常喜歡函數式的團隊,React是更好的選擇。 Facebook 也會繼續大力投資於性能改進。新 API 裏大家也很是關心性能,這很好,我很欣賞這一點,但大家這樣作會違背了另外一波人的想法。

性能不是 Vue 的賣點,函數式編程也不是 Vue 的賣點,這個 RFC 裏提到的其餘奇奇怪怪的東西都不是 Vue 的賣點。沒有人會看着 Vue 說「哇,在渲染某個測試組件 1000 次的時候,Vue 比 React 快了整整兩毫秒耶!」

採用 Vue 的人是什麼人?是哪些對 React 表現出的複雜性不滿的人。而如今,Vue 團隊卻告訴我「React 的方法更高級,適合高級用戶」。坦白講,這是一種冒犯。咱們早就預測了 React 帶來的複雜性不值得咱們的團隊去嘗試,或者咱們已經在用 React 的過程當中遇到了問題,因此咱們才選 Vue,由於 Vue 搞定了這些問題並且能作到和 React 同樣高效。

如何才能在 React 的地盤戰勝 React?Vue 3 彷佛給出了答案(譯註:答案就是模仿 React)。恭喜大家 Vue 團隊戰勝了 React(譯註:我猜這裏的意思是尤雨溪說 Vue 的新 API 跟 React 類似可是性能更好),可是咱們等的不是這個答案。這不是咱們想要向咱們的團隊、咱們的老闆、咱們的利益相關者給出的答案。

我想問你一個問題:我該如何管理個人代碼?長期方案應該是重寫我應用裏全部的代碼(在 Vue 3 存在的時間裏),而後我就回到了原點,那個我放棄 React 轉向 Vue 2 的原點。你以爲要求你的用戶這樣作是公平的嗎?你肯定這就是大家想要的結果嗎?

尤雨溪迴應道:

首先,新 API 跟性能關係不大,Vue 3 的性能提高主要來源於新的模板編譯策略。
其次,我以爲你把問題簡化成新 API 會帶來複雜性有點不合適。這份 RFC 很難理解,由於裏面的信息量太大了。實際上你能夠看看這個例子,你極可能就會了解新的 API 並不會帶來新的複雜性:gist.github.com/yyx9908
Vue 有大量的用戶,老實講我不太理解爲何新增一批 API 會是一種冒犯。由於咱們清楚地瞭解到新的 API 在某些狀況下會更優雅,也許你尚未遇到這些狀況(我不是說你目前的需求比較低端)。咱們在應對不一樣的應用,因此這些狀況咱們都要考慮。相反,若是你認爲 Vue 永遠不會遇到一個複雜到必須使用這些新 API 的需求,那纔是一種冒犯。
最後回答你的問題:只要你願意,你能夠一直使用舊 API。只要社區認爲舊 API 有必要保留,咱們就會一直保留。咱們不會強迫你用新 API。

另外一我的評論到:

我只想說 RFC 有一個重大的變化,以前寫的是「標準版」和「兼容版」,標準版不支持 data / computed / methods / watch / provide / inject / mixins / extends 和全部聲明週期。
RFC 更新以後,以前的「兼容版」變成了「標準版」,而以前的「標準版」變成了「輕量版」。

dessant 說:

「兼容版」這個詞說明了 Vue 團隊對舊 API 的態度。兼容對我來講意味着過期的。

boubiyeah 說:

我不知道爲何尤雨溪不能在這兩個版本的命名問題上更坦率一點。
爲何尤就不能直接說「我在版本命名和對將來的計劃上有些問題,社區的反應讓我知道我應該修改一下措辭」。
相反,他說的是:「你在說什麼?我一直都是這樣想的呀」。

gustojs 說:

這可能有一部分是個人錯。尤雨溪主要關注點在技術層面,而個人關注點在社區方面。咱們沒有意識到版本命名帶來的潛在問題。


最後,就在6小時前,尤雨溪發了一篇推文:

Earlier today I was really itching to write a dedicated blog post for those who did not and still refuse to actually read the RFC, but it's my wife's birthday so I'll do it tomorrow.
前些天我很是想要寫一篇專門的文章給那些至今尚未讀過 RFC 的人看,可是今天是我老婆的生日,因此我會明天寫這篇文章。


補充:中文版 RFC 並無更新

完。

相關文章
相關標籤/搜索