React學習系列二,堅持!

2021-01-09 你的愛情觀

這一篇,我們將介紹 React 中最重要的概念之一 —— 組件。

元素與組件(Element & Component) 元素

元素是構建 React 應用的最小單位。元素所描述的也就是你在瀏覽器中能夠看到的東西。

我們在編寫 React 代碼時一般用 JSX 來描述 React 元素。

在作用上,我們可以把 React 元素理解為 DOM 元素,但實際上,React 元素只是 JS 當中普通的對象。React 內部實現了一套叫做 React DOM 的東西,或者我們稱之為 Virtual DOM 也就是虛擬 DOM.通過一個樹狀結構的 JS 對象來模擬 DOM 樹。

React 之所以快就是因為這一套虛擬 DOM 的存在,React 內部還實現了一個低複雜度高效率的 Diff 算法,不同於以往框架,例如 Angular 使用的髒檢查。在應用的數據改變之後,React 會盡力少地比較,然後根據虛擬 DOM 只改變真實 DOM 中需要被改變的部分。並且通過這一層單獨抽象的邏輯讓 React 有了無限的可能,就比如 react native 的實現。

組件

要注意到,在 React 當中元素和組件是兩個不同的概念,我們需要明確的是,組件是構建在元素的基礎之上的。

React 官方對組件的定義,是指在 UI 界面中,可以被獨立劃分的、可復用的、獨立的模塊。

其實就類似於 JS 當中對 function 函數的定義,它一般會接收一個名為 props 的輸入,然後返回相應的 React 元素,再交給 ReactDOM,最後渲染到屏幕上。

函數定義與類定義組件(Functional & Class)

React 提供了兩種定義組件的方法:

函數定義組件,只需要定義一個接收 props 傳值,返回 React 元素的方法即可:

類定義組件,也就是使用 ES6 中新引入的類的概念來定義 React 組件:

組件在定義好之後,可以通過 JSX 描述的方式被引用,組件之間也可以相互嵌套和組合。

展示與容器組件(Presentational & Container)

之前我們說過,React 不算是一個框架,他只關心視圖層次,因此,他是如何處理數據與視圖關係呢?為了解決這一問題,就引入了展示組件和容器組件的概念。這是我們在開發 React 應用時的最佳實踐。

這是一個回複列表組件,乍看上去很正常也很合理。但實際上在開發 React 應用時,我們應該避免寫出這樣的組件,因為這類組件擔負的功能太多了。

它只是一個單一的組件,但需要同時負責初始化 state,通過 ajax 獲取伺服器數據,渲染列表內容,在實際應用中,可能還會有更多的功能依賴。

通過應用展示組件與容器組件的概念,我們可以把上述的單一組件重構為一個展示回複列表組件和回複列表容器:

這樣單一組件就分割成兩個組件了。

我們再來明確一下展示組件和容器組件的概念:

展示組件

主要負責組建內容如何展示

從 props 接收父組件傳遞的數據

大多數可以通過函數定義組件聲明

容器組件

主要關注組件數據如何交互

擁有自身的 state,從伺服器獲取數據,或與 redux 等其他數據處理模塊協作

需要通過類定義組件聲明,並包含生命周期函數和其他附加方法

有狀態與無狀態組件(Stateful & Stateless)

有狀態組件

有狀態的意思是這個組件能夠獲取儲存改變應用或組件本身的狀態數據,在 React 當中也就是 state,一些比較明顯的特徵是我們可以在這樣的組件當中看到對 this.state 的初始化,或 this.setState 方法的調用等等。

無狀態組件

這樣的組件一般只接收來自其他組件的數據。一般這樣的組件中只能看到對 this.props 的調用,通常可以用函數定義組件的方式聲明。

注意:並不是所有的展示組件都是無狀態組件,所有的容器組件都是有狀態組件。

受控與非受控組件(Controlled & Uncontrolled)

受控組件

一般涉及到表單元素時我們才會使用這種分類方法,受控組件的值由 props 或 state 傳入,用戶在元素上交互或輸入內容會引起應用 state 的改變。在 state 改變之後重新渲染組件,我們才能在頁面中看到元素中值的變化,假如組件沒有綁定事件處理函數改變 state,用戶的輸入是不會起到任何效果的,這也就是"受控"的含義所在。

非受控組件

類似於傳統的 DOM 表單控制項,用戶輸入不會直接引起應用 state 的變化,我們也不會直接為非受控組件傳入值。想要獲取非受控組件,我們需要使用一個特殊的 ref 屬性,同樣也可以使用 defaultValue 屬性來為其指定一次性的默認值。

注意:通常情況下,React 當中所有的表單控制項都需要是受控組件。但正如我們對受控組件的定義,想讓受控組件正常工作,每一個受控組件我們都需要為其編寫事件處理函數。

組合與繼承(Composition & Inheritance)

React 當中的組件是通過嵌套或組合的方式實現組件代碼復用的。通過 props 傳值和組合使用組件幾乎可以滿足所有場景下的需求。這樣也更符合組件化的理念,就好像使用互相嵌套的 DOM 元素一樣使用 React 的組件,並不需要引入繼承的概念。

React 官方也希望我們通過組合的方式來使用組件,如果你想實現一些非界面類型函數的復用,可以單獨寫在其他的模塊當中在引入組件進行使用。

相關焦點

  • React系列(一) -邂逅React開發
    包括Vue3很多新的特性,也是借鑑和學習了React比如React Hooks是開創性的新功能(也是我們課程的重點)Vue Function Based API學習了React Hooks的思想Flutter的很多靈感都來自React,來自官網的一段話:(SwiftUI呢)
  • React是什麼?React特點及框架整理(React一)-開課吧
    學習是個吃苦的過程,而學編程那就是個更吃苦的事情,一個技術點需要上萬的字來說明,一個實現頁面需要上萬的代碼數據來湊,既然走上了這條路,願大家無怨無悔,今天為大家帶來了關於前端開發項目中javascript庫中recact詳解,你看或者不看,它就在這裡。
  • 基於jsoneditor二次封裝一個可實時預覽的json編輯器組件react版
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言做為一名前端開發人員,掌握vue/react/angular等框架已經是必不可少的技能了,我們都知道,vue或react等MVVM框架提倡組件化開發
  • react vision紫橙配色開箱測評
    今天小編給大家帶來了一款比較冷門的球鞋 react vision ,小編選擇的是這款紫橙配色,雖然是一款冷門鞋款,但是小編還是要給大家強烈推薦和種草!下面就讓小編帶領大家一起來看看這款 react vision 紫橙配色的開箱測評吧!
  • 耐克Epic React會磨腳嗎 Nike Epic React Flyknit上腳測評
    耐克的跑鞋技術在不斷的進步之中,這是我們大家都知道的事情,從Air Max系列的內置氣墊到VaporMax系列的大氣墊,這是有目共睹的進步,現如今耐克再次推出最強跑鞋Epic React,可以說這一舉動也是吸引了相當多的耐克粉絲啊,比方說趣流網小編就是一枚鐵粉了耐克Epic React
  • react
    react 3d模型 There is something in me that is amazed but beautiful 3D interfaces.― Mario Andretti ―馬裡奧·安德烈蒂 學習繩索 (Learning the Ropes)I decided to make a 3D carousel with
  • 耐克react跑鞋耐磨嗎 耐克react跑鞋壽命為多少km
    耐克的緩震科技react是一款能夠和阿迪達斯的boost相提並論的科技,耐克的react跑鞋也是非常受歡迎的鞋款,那麼,耐克的react跑鞋的耐磨性怎麼樣呢?跑鞋的壽命又是多少呢?感興趣的朋友一起來看看吧!
  • NIKE EPIC REACT FLYKNIT 真假大對比
    說起軟彈的腳感boost系列首當其中但是nike在沉寂了多年之後也研發了自己的新科技nike react在曝光的時候大家都很好奇,到底它的性能是否能夠趕超boost呢?NIKE EPIC REACT FLYKNIT 的對比環節鞋盒對比正面為橙色的鞋盒搭配上白色的logo看起來沒有任何差異側面信息表達的也完全一致正面對比採用了經典的flyknit racer為設計靈感鞋舌一體化的設計更容易穿脫側面的線條表現的十分流暢中底採用了一塊nike react
  • 耐克react上腳實測:枕頭般柔軟,像彈簧般回彈!
    Nike的react自從推出以來,已經有了一年的時間了。當初這個Nike用來對抗Adidas boost的最新材料,實際上腳的效果又如何呢?而在react系列的Nike鞋中,最為國內消費者所熟悉的一款,應該就是epic react了。
  • React SSR 同構入門與原理
    執行命令: create-react-app react-csr 創建一個 React SPA 單頁面應用項目 。執行命令: npm run start 啟動項目。最終呈現出來的界面卻是這樣的: 原理很簡單,相信學習過 webpack 的同學都知道,那就是 webpack 把所有代碼都打包成相應腳本並插入到 HTML 界面中,瀏覽器會解析 script 腳本,通過動態插入 DOM 的方式展示出相應界面。
  • 耐克新技術react表現到底怎麼樣?
    大家都知道,去年年初的時候,面對阿迪boost系列鞋款越來越強勁的衝擊,Nike終於一改不斷復刻圈錢的慵懶模樣,轉而推出了他們的最新技術react。react並不是一種新型的氣墊,而是一種傳統的固態材料。但是老對手的boost,也是固態材料,而且廣受好評。
  • 精通react/vue組件設計之配合React Portals實現一個(Drawer)組件
    通過組件的設計過程,大家會接觸到一個完成健壯的組件設計思路和方法,也能在實現組件的過程逐漸對react/vue的高級知識和技巧有更深的理解和掌握,並且在企業實際工作做遊刃有餘.作為數據驅動的領導者react/vue等MVVM框架的出現,幫我們減少了工作中大量的冗餘代碼, 一切皆組件的思想深得人心.
  • 精通React/Vue系列之帶你實現一個功能強大的通知提醒框
    基於react實現一個通知提醒框(Notification)通知框的API調用實現思路其實就是通過jsx動態渲染約定好的標籤,然後通過ReactDom的Render API將dom渲染到指定容器內掛載到頁面,其中要想實現Notification.info這樣的方式還需要考慮到創建實例的問題,我們應該使用單例模式來控制實例的創建個數。
  • Nike React Element 87
    nike sportswear 延伸了想像力的極限,創造了令人垂涎的react element 87 的新色彩。經過一系列高調的合作,87看到更廣泛的發布,同樣大膽的配色方案。透氣和半透明聚酯鞋面,高科技外觀與極其舒適的react泡麵中底相匹配。軟木襯裡鞋墊增加奢華和舒適感。
  • 與阿迪的boost相比,耐克的新科技react怎麼樣?
    於是在這種強烈的危機感之下,Nike公司在去年推出了一項全新的科技——react,對其的要求定位在了和Adidas的看家技術boost同一高度上。和boost一樣,react作為一項全新的緩震技術,它的一次亮相也同樣選在了籃球鞋上。而且之後為了和boost爭奪市場,react同樣被Nike運用到了其他的運動鞋之上。react一經出世,就被很多朋友拿來和boost對比。
  • Nike React 87高橋盾拆解測評
    就在這個時候,最初的唯美範又開始流行,nike react Element 87的出現正好詮釋了這一系列的火爆程度薄如蟬翼的鞋面你看到了嗎?全掌react的加持你嘗試了嗎?今天我們帶來的就是公司級別的拆解環節鞋子整體分為4部分!鞋面在上面就有所提及,薄如蟬翼的鞋面在此完美展現!
  • 「首席架構師推薦」關於React生態系統的一系列精選資源(5)
    GraphQL ORMsql-to-graphql - 根據您的SQL資料庫結構生成GraphQL APIgraphql-sequelize - 通過Sequelize實現MySQL和Postgres的GraphQL和RelayRelay數據驅動的React應用程式Relay一般資源接力官方網站接力GitHubRelay教程官方接力入門視覺學習者的接力
  • react中關於hook介紹及其使用
    前言最近由於公司的項目開發,就學習了在react關於hook的使用,對其有個基本的認識以及如何在項目中去應用hook。當使用hook時,就可以進行組件邏輯的劃分,將相同的邏輯給整合在一起,這樣就大大增加可讀性也在一方面利於維護不需要對於class組件的理解,當你在最初去學習時,你不得不去理解this這個關鍵字,在當前組件所表示的含義,但是在hook中就不需要。
  • 值得選用的十三種優秀React JS框架
    用Yarn或NPM安裝Shards# Yarn yarn add shards-react # NPM npm i shards-react 安裝sudo npm install redux sudo npm install react-redux 應用
  • AJ React Elevation開箱測評
    還記得這雙耐克的全新團隊鞋款Jordan React Elevation麼,剛爆出的時候很多小夥伴還以為是鑽石2代鞋款,其實小編覺得鞋款和威少2代才是最像的哈,前掌Zoom+後掌react的配置加持還是得到了很多人的關注的,下面一起來看看吧。