【譯文&摘抄】Angular、React、Vue的2017

原文地址:https://medium.com/unicorn-supplies/angular-vs-react-vs-vue-a-2017-comparison-c5c52d620176
作者:Jens Neuhaus

Web 三劍客:Angular、React、Vue

一些歷史:

Angular:源自 Google,是基於 TypeScript 的 Javascript 框架。被描述爲:“超級厲害的 JavaScript MVW 框架”(Model- View-Whatever,MVW…..咦有點萌)

一段 create-react-app 的 TypeScript 代碼:

// src/components/Hello.tsx

import * as React from 'react';

export interface Props {
  name: string; // That's TYPE!
  enthusiasmLevel?: number;
}

function Hello({ name, enthusiasmLevel = 1 }: Props) {
  if (enthusiasmLevel <= 0) {
    throw new Error('You could be a little more enthusiastic. :D');
  }

  return (
    <div className="hello">
      <div className="greeting">
        Hello {name + getExclamationMarks(enthusiasmLevel)}
      </div>
    </div>
  );
}

export default Hello;

// helpers

function getExclamationMarks(numChars: number) {
  return Array(numChars + 1).join('!');
}

React:被描述爲 “用於構建用戶界面的 JavaScript 庫”,由 Facebook 進行開發和維護。
Facebook 目前正在開發 React Fiber。它會改變 React 的底層算法,渲染速度應該會更快。

Vue: Vue 將自己描述爲一款“用於構建直觀,快速和組件化交互式界面的 MVVM (Model–view–viewmodel,MVVM 模式將 MVP 的 Presenter 改名爲 ViewModel,基本上與 MVP 模式完全一致。) 框架”。

Angular,React 與 Due 的 Github Star 歷史

在過去 2 年,npm 包的下載次數

Comparision

組件

React 和 Vue 都擅長處理組件,組件其實即是函數,接收參數輸入並返回元素作爲輸出。

詳細說明:一個組件(本質就是一個函數)得到一個輸入(函數參數),並且進行一些內部的行爲/計算之後,返回一個渲染的 UI 模板作爲輸出。定義的組件應該易於在網頁或其他組件中重用(組件的一個目的就是爲了複用)。

Typescript,ES6 與 ES5

React 使用 Javascript ES6。
Vue 使用 Javascript ES5 或 ES6。
Angular 則依賴於 TypeScript。(儘管 TypeScript 在不斷髮展,但與整個 JavaScript 語言相比,TypeScript 的用戶羣仍然很小。一個風險可能是你正在向錯誤的方向發展…..)

模板 —— JSX 還是 HTML

React 打破了長期以來的最佳實踐。幾十年來,開發人員試圖分離 UI 模板和內聯的 Javascript 邏輯,但是使用 JSX,這些又被混合了。…..但是,分離模板和邏輯應該僅僅是技術的分離,而不是關注的分離。你應該構建組件而不是模板。組件是可重用的、可組合的、可單元測試的。

JSX 是一個類似 HTML 語法的【可選預處理器】,並隨後在 JavaScript 中進行編譯。

JSX 意味着 React 中的所有內容都是 Javascript – 用於JSX模板和邏輯。Cory House 在 2016 年 1 月的文章 中指出:“Angular 2 繼續把 ‘JS’ 放到 HTML 中。React 把 ‘HTML’ 放到 JS 中。”
這是一件好事,因爲 Javascript 比 HTML 更強大。

框架和庫

Angular 是一個框架,但是 React 和 Vue 則是庫。

之所以說 Angular 是一個庫,是因爲它提供了關於如何構建應用程序的強有力的約束,Angular 是一個 “完整的解決方案” - 功能齊全,你可以愉快的開始開發。你不需要研究庫,路由解決方案或類似的東西 - 你只要開始工作就好了。

另一方面,React 和 Vue 是很靈活的。他們的庫可以和各種包搭配。
有了 React,你甚至可以交換庫本身的 API 兼容替代品,如 Inferno。然而,靈活性越大,責任就越大 - React 沒有規則和有限的指導。每個項目都需要決定架構,而且事情可能更容易出錯

關於 React & Vue : React “是 JS 界在意識層面向前邁出的一大步,它以一種實用簡潔的方式向人們展示了真正的函數式編程。和 Vue 相比,React 的一大缺點是由於 JSX 的限制,組件的粒度會更小。這裏是文章的引述:

對於我和我的團隊來說,代碼的可讀性是很重要的,但編寫代碼很有趣也是非常重要的。在實現真正簡單的計算器小部件時創建 6 個組件並不奇怪。在許多情況下,在維護,修改或對某個小部件進行可視化檢查方面也是不好的,因爲你需要繞過多個文件/函數並分別檢查每個小塊的 HTML。再次,我不是建議寫巨石 - 我建議在日常開發中使用組件而不是微組件

狀態管理和數據綁定

構建用戶界面很困難,因爲處處都有狀態 - 隨着時間的推移而變化的數據帶來了複雜性。定義的狀態工作流程對於應用程序的增長和複雜性有很大的幫助。

它是如何工作的?
組件在任何時間點描述 UI。當數據改變時,框架重新渲染整個 UI 組件 - 顯示的數據始終是最新的。我們可以把這個概念稱爲“ UI 即功能”。

React 經常與 Redux 在一起使用;Vue 可以使用 Redux,但它提供了 Vuex 作爲自己的解決方案。
React 和 Angular 之間的巨大差異是單向與雙向綁定。當 UI 元素(例如,用戶輸入)被更新時,Angular 的雙向綁定改變 model 狀態。React 只有一種方法:先更新 model,然後渲染 UI 元素。
1)Angular 的方式實現起來代碼更乾淨,開發人員更容易實現。
2)React 的方式會有更好的數據總覽,因爲數據只能在一個方向上流動(這使得調試更容易)。

How to Choose

如果你在Google工作:Angular
如果你喜歡 TypeScript:Angular(或 React)
如果你喜歡面向對象編程(OOP): Angular
如果你需要指導手冊,架構和幫助:Angular

如果你在Facebook工作:React
如果你喜歡靈活性:React
如果你喜歡大型的技術生態系統:React
如果你喜歡在幾十個軟件包中進行選擇:React
如果你喜歡JS和“一切都是 Javascript 的方法”:React

如果你喜歡真正乾淨的代碼:Vue
如果你想要最平緩的學習曲線:Vue
如果你想要最輕量級的框架:Vue
如果你想在一個文件中分離關注點:Vue
如果你一個人工作,或者有一個小團隊:Vue(或 React)

如果你的應用程序往往變得非常大:Angular(或 React)
如果你想用 react-native 構建一個應用程序:React
如果你想在圈子中有很多的開發者:Angular 或 React
如果你與設計師合作,並需要乾淨的 HTML 文件:Angular or Vue
如果你喜歡 Vue 但是害怕有限的技術生態系統:React

如果你不能決定,先學習 React,然後 Vue,然後 Angular。

發佈了344 篇原創文章 · 獲贊 39 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章