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