摘要:介紹是內(nèi)部的一個類庫并開源,可用于創(chuàng)建用戶交互界面。主要有四個主要概念構(gòu)成,下面分別來簡單介紹一下之所以引入虛擬,一方面是性能的考慮。允許直接在模板插入變量。這種單向數(shù)據(jù)流使得整個系統(tǒng)都是透明可預(yù)測的。
React 介紹
React是Facrbook內(nèi)部的一個JavaScript類庫并開源,可用于創(chuàng)建Web用戶交互界面。它引入了一種新的方式來處理瀏覽器DOM。那些需要手動更新DOM、費力地記錄每一個狀態(tài)的日子一去不復返。React使用很新穎的方式解決了這些問題。你只需要聲明地定義各個時間點的用戶界面,而無序關(guān)系在數(shù)據(jù)變化時,需要更新哪一部分DOM。在任何時間點,React都能以最小的DOM修改來更新整個應(yīng)用程序。
React主要有四個主要概念構(gòu)成,下面分別來簡單介紹一下
Virtual DOM之所以引入虛擬DOM,一方面是性能的考慮。Web應(yīng)用和網(wǎng)站不同,一個Web應(yīng)用 中通常會在單頁內(nèi)有大量的DOM操作,而這些DOM操作很慢
在React中,應(yīng)用程序在虛擬DOM上操作,這讓React有了優(yōu)化的機會。簡單說, React在每次需要渲染時,會先比較當前DOM內(nèi)容和待渲染內(nèi)容的差異, 然后再決定如何最優(yōu)地更新DOM
除了性能的考慮,React引入虛擬DOM更重要的意義是提供了一種一致的開發(fā)方式來開發(fā)服務(wù)端應(yīng)用、Web應(yīng)用和手機端應(yīng)用
因為有了虛擬DOM這一層,所以通過配備不同的渲染器,就可以將虛擬DOM的內(nèi)容 渲染到不同的平臺。而應(yīng)用開發(fā)者,使用JavaScript就可以通吃各個平臺了。相當棒的思路!且虛擬DOM是內(nèi)存數(shù)據(jù),性能是極高的,而對實際DOM進行操作的僅僅是 Diff部分,因而能達到提高性能的目的React組件
對于React而言,則完全是一個新的思路,開發(fā)者從功能的角度出發(fā),將UI分成不同的組件,每個組件都獨立封裝。
在React中,你按照界面模塊自然劃分的方式來組織和編寫你的代碼,對于評論界面而言,整個UI是一個通過小組件構(gòu)成的大組件,每個組件只關(guān)心自己部分的邏輯,彼此獨立。
組件化開發(fā)特性:
React認為一個組件應(yīng)該具有如下特征:
1.可組合(Composeable):一個組件易于和其它組件一起使用,或者嵌套在另一個組件內(nèi)部。如果一個組件內(nèi)部創(chuàng)建了另一個組件,那么說父組件擁有(own)它創(chuàng)建的子組件,通過這個特性,一個復雜的UI可以拆分成多個簡單的UI組件;
2.可重用(Reusable):每個組件都是具有獨立功能的,它可以被使用在多個UI場景;
3.可維護(Maintainable):每個小的組件僅僅包含自身的邏輯,更容易被理解和維護;
4.可測試(Testable):因為每個組件都是獨立的,那么對于各個組件分別測試顯然要比對于整個UI進行測試容易的多。
組件定義
在React中定義一個組件也是相當?shù)娜菀?,組件就是一個 實現(xiàn)預(yù)定義接口的JavaScript類:
組件渲染
ReactDOM.render 是 React 的最基本方法,用于將模板轉(zhuǎn)為 HTML 語言,并插入指定的 DOM 節(jié)點。
ReactDOM.render(Hello, world!
, document.getElementById("example") );
而這個方法, 必須而且只能返回一個有效的React元素。這意味著,如果你的組件是由多個元素構(gòu)成的,那么你必須在外邊包一個頂層 元素,然后返回這個頂層元素。比如我們創(chuàng)建一個布局組件:
render:function(){ return React.createElement( "div",null, React.createElement("div",null,"header"), React.createElement("div",null,"content"), React.createElement("div",null,"footer") ); }
ES5方式定義組件
"use strict"; var HelloMessage = React.createClass({ displayName: "HelloMessage", render: function render() { return React.createElement( "div", null, "Hello ", this.props.name ); } });
ES6方式定義組件
import "./Hello.css"; import "./Hello.scss"; import React, {Component} from "react"; // 內(nèi)聯(lián)樣式 let style={ backgroundColor:"blue" } export default class Hello extends Component { constructor(props) { super(props); this.state = { count: "es6"}; } render() { return () } }Hello world{this.state.count}
JSX方式定義組件
var HelloMessage = React.createClass({ render: function() { returnJsx語法Hello {this.props.name}; } }); ReactDOM.render(, mountNode);
什么是jsx
在用React寫組件的時候,通常會用到JSX語法,粗看上去,像是在Javascript代碼里直接寫起了XML標簽,實質(zhì)上這只是一個語法糖,每一個 XML標簽都會被JSX轉(zhuǎn)換工具轉(zhuǎn)換成純Javascript代碼,當然你想直接使用純Javascript代碼寫也是可以的,只是利用JSX,組件的結(jié)構(gòu)和組件之間的關(guān)系看上去更加清晰
Jsx語法使用
HTML 語言直接寫在 JavaScript 語言之中,不加任何引號,這就是 JSX 的語法,它允許 HTML 與 JavaScript 的混寫。
var names = ["Alice", "Emily", "Kate"]; ReactDOM.render({ names.map(function (name) { return, document.getElementById("example") );Hello, {name}!}) }
上面代碼體現(xiàn)了 JSX 的基本語法規(guī)則:遇到 HTML 標簽(以 < 開頭),就用 HTML 規(guī)則解析;遇到代碼塊(以 { 開頭),就用 JavaScript 規(guī)則解析。
JSX 允許直接在模板插入 JavaScript 變量。如果這個變量是一個數(shù)組,則會展開這個數(shù)組的所有成員
var arr = [Hello world!
,React is awesome
, ]; ReactDOM.render({arr}, document.getElementById("example") );
上面代碼的arr變量是一個數(shù)組,結(jié)果 JSX 會把它的所有成員,添加到模板,運行結(jié)果如下。
Data Flow(單向數(shù)據(jù)流)單向數(shù)據(jù)流
先來了解一下 Flux 的核心“單向數(shù)據(jù)流“怎么運作的:
Action -> Dispatcher -> Store -> View
更多時候 View 會通過用戶交互觸發(fā) Action,所以一個簡單完整的數(shù)據(jù)流類似這樣:
整個流程如下:
1.首先要有 action,通過定義一些 action creator 方法根據(jù)需要創(chuàng)建 Action 提供給 dispatcher
2.View 層通過用戶交互(比如 onClick)會觸發(fā) Action
3.Dispatcher 會分發(fā)觸發(fā)的 Action 給所有注冊的 Store 的回調(diào)函數(shù)
4.Store 回調(diào)函數(shù)根據(jù)接收的 Action 更新自身數(shù)據(jù)之后會觸發(fā)一個 change 事件通知 View 數(shù)據(jù)更改了
5.View 會監(jiān)聽這個 change 事件,拿到對應(yīng)的新數(shù)據(jù)并調(diào)用 setState 更新組件 UI
所有的狀態(tài)都由 Store 來維護,通過 Action 傳遞數(shù)據(jù),構(gòu)成了如上所述的單向數(shù)據(jù)流循環(huán),所以應(yīng)用中的各部分分工就相當明確,高度解耦了。
這種單向數(shù)據(jù)流使得整個系統(tǒng)都是透明可預(yù)測的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102870.html
摘要:寒假結(jié)束了,在寒假期間玩了一下,模仿豆瓣實現(xiàn)了一個查看當前熱門電影和即將上映電影的簡單,項目比較簡單,十分適合剛剛?cè)腴T的同學查看。 寒假結(jié)束了,在寒假期間玩了一下react-native,模仿豆瓣實現(xiàn)了一個查看當前熱門電影和即將上映電影的簡單app,項目比較簡單,十分適合剛剛?cè)腴T的同學查看。首先我們要了解react-native: react-native中文網(wǎng)、react-nativ...
摘要:展示組件與容器組件的綁定庫的基本開發(fā)思想是展示組件與容器組件相分離。技術(shù)上講,容器組件就是使用從樹中讀取部分數(shù)據(jù),并通過來把這些數(shù)據(jù)提供給要渲染的組件。 說明:閱讀本篇文章需要對Redux有一定的了解,對Redux不了解的同學可先看看這篇文章Redux技術(shù)架構(gòu)簡介(一) 1. React中引入react-redux 為了讓Redux和React更好的配合,F(xiàn)acebook專門開發(fā)了一個...
摘要:文檔翻譯系列三簡介先來看一下下面的變量聲明這種有趣的標簽語法既不是字符串也不是。這種形式被稱作,他是的一種擴展語法。為便于閱讀,我們將分隔成多行。表示對象將編譯成調(diào)用。我們建議您為選擇的編輯器搜索語法方案,以便和代碼都能夠被正確高亮的顯示。 React文檔翻譯系列(三)JSX簡介 先來看一下下面的變量聲明: const element = Hello world! 這種有趣的標簽語法既...
摘要:在方法中處理數(shù)據(jù)有三不同的角色派發(fā)器儲存視圖層我們的組件的主要思想是有一個單一源儲存他們只能通過觸發(fā)更新。這些操作負責調(diào)用派發(fā)器可以訂閱更改并相應(yīng)地更新自己的數(shù)據(jù)。與不同不使用派發(fā)器而是使用純函數(shù)來定義數(shù)據(jù)變異函數(shù)。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3812原文:https://www.fullstackreact...
摘要:利用來搭建代碼。雖然這不是安裝的唯一方式,但我發(fā)現(xiàn),是非常好用的包管理器。終端窗口打開后,會啟動,并由服務(wù)器處理以上請求。面對這種情況時,需要關(guān)閉終端窗口,停止在上的應(yīng)用,并重新運行。使用設(shè)定應(yīng)用的用戶界面。命名這兩個文件為和。 【編者按】本篇文章的作者是 Joyce Echessa——渥合數(shù)位服務(wù)創(chuàng)辦人,畢業(yè)于臺灣大學,近年來專注于協(xié)助客戶進行 App 軟體以及網(wǎng)站開發(fā)。本篇文章中,...
閱讀 1045·2021-09-22 15:26
閱讀 2624·2021-09-09 11:52
閱讀 1917·2021-09-02 09:52
閱讀 2254·2021-08-12 13:28
閱讀 1192·2019-08-30 15:53
閱讀 522·2019-08-29 13:47
閱讀 3393·2019-08-29 11:00
閱讀 3105·2019-08-29 10:58