摘要:我們稱這些結(jié)構(gòu)為,因為通常他們是之外宿主環(huán)境的一部份就像和。宿主實例由節(jié)點構(gòu)成的我們稱為。甚至都可以稱作渲染器。這種模式適用于那些并不提供像的而是克隆雙親樹并始終替換掉頂級子樹的宿主環(huán)境。在宿主樹級別上的不可變性使得多線程變得更加容易。
很多教程把React介紹為一個UI框架。這很合理因為它就是一個UI庫,這就是react標語的意思。1 Host Tree
這篇文章不會叫你任何關于建立用戶界面的知識,但是會幫助你更生層次的理解React編程模型。
這是一篇深入解析的文章,對初學者不太適合。在這篇文章我將通過第一準則描述大部分的React編程,我將解釋react是如何工作的。
一些程序輸出數(shù)字,另一些程序輸出詩歌。不同的語言和他們的運行時通常會對特定的實例進行優(yōu)化,React也不例外。
React會生成一顆不斷變化的樹結(jié)構(gòu)。它可能是Dom樹,ios層級,關于PDF的原語樹,或者是JSON的對象。通常我們希望用它們來生成UI界面。
我們稱這些結(jié)構(gòu)為“host tree”, 因為通常他們是React之外宿主環(huán)境的一部份——就像Dom和iOS。host tree 通常擁有自己的命令式的API。React就是它上面的一層。
所以React的作用是什么呢?抽象的說,它能幫助你在編寫程序時可預測的操作復雜的Host tree,并且對像交互,網(wǎng)絡響應,定時器等等這樣的外部事件作出反應。
當專門的工具通過特定的約束獲取收益,他就比一般的工作優(yōu)秀。React通過下面的兩項原則實現(xiàn):
穩(wěn)定:host tree相對來說比較穩(wěn)定,大部分的更新不會改變整個結(jié)構(gòu)。。如果一款app經(jīng)常用完全不同的組合改變交互元素,它會比較難用的。按鈕去哪了呢?為什么我的屏幕會跳動?
有規(guī)律的: Host tree 可以將拆分成不同的UI組件但表現(xiàn)一致,而不是不同的形狀。
這些原則恰好適用于大多數(shù) UI 。 然而,當輸出沒有穩(wěn)定的“模式”時 React 并不適用。例如,React 也許可以幫助你編寫一個 Twitter 客戶端,但對于一個 3D 管道屏幕保護程序 并不會起太大作用。
2.Host Instances(宿主實例)由節(jié)點構(gòu)成的host tree 我們稱為Host Instances。
在Dom環(huán)境中,宿主實例就是一般的DOM節(jié)點——就像你使用document.createElement("div")方法時所得到的對象。在 iOS 中,宿主實例可以是從 JavaScript 到原生視圖唯一標識的值。
宿主實例有它們的屬性,他們也有可能將其他的宿主實例作為子項。
一般會有API操作宿主的實例。。比如Dom提供了像appendChild, removeChild, setAttribute等等的API。在React中一般都不使用這些API,因為都有React來做。
渲染器(render)教會 React 如何與特定的宿主環(huán)境通信以及如何管理它的宿主實例。React DOM、React Native 甚至 Ink 都可以稱作 React 渲染器。你也可以創(chuàng)建自己的 React 渲染器 。
React 渲染器能以下面兩種模式之一進行工作。
絕大多數(shù)渲染器都被用作“可變”模式。這種模式正是 DOM 的工作方式:我們可以創(chuàng)建一個節(jié)點,設置它的屬性,在之后往里面增加或者刪除子節(jié)點。宿主實例是完全可變的。
但 React 也能以”不變“模式工作。這種模式適用于那些并不提供像 appendChild 的 API 而是克隆雙親樹并始終替換掉頂級子樹的宿主環(huán)境。在宿主樹級別上的不可變性使得多線程變得更加容易。React Fabric 就利用了這一模式。
作為 React 的使用者,你永遠不需要考慮這些模式。我只想強調(diào) React 不僅僅只是從一種模式轉(zhuǎn)換到另一種模式的適配器。它的用處在于以一種更好的方式操控宿主實例而不用在意那些低級視圖 API 范例。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101728.html
摘要:元素在宿主環(huán)境中,一個宿主實例是最小的單位像節(jié)點。在中最小的單位是元素。他們總是不斷的重建和銷毀。元素是不可變的。比如,你不能改變一個元素的屬性和其他屬性。入口每一個渲染器都有一個入口。當我們說,就意味著親愛的,將我的元素放到的宿主樹去。 1、React元素 在宿主環(huán)境中,一個宿主實例是最小的單位(像DOM節(jié)點)。在React中最小的單位是React元素。一個React元素就是一個描述...
摘要:確定宿主樹怎么樣來響應新的信息的這個過程被稱為協(xié)調(diào)。協(xié)調(diào)有兩種方法。我們已經(jīng)創(chuàng)建了一個作為第一個也是唯一一個子元素,并且我們希望在同一個地方再次渲染一個。這個已經(jīng)與的思想非常接近了。 1.協(xié)調(diào) 如果我們在同一個容器中使用兩次ReactDOM.render()會發(fā)生什么? ReactDOM.render( , document.getElementById(container) ...
摘要:在上面我們已經(jīng)知道瀏覽器是一幀一幀執(zhí)行的,在兩個執(zhí)行幀之間,主線程通常會有一小段空閑時間,可以在這個空閑期調(diào)用空閑期回調(diào),執(zhí)行一些任務。另外由于這些堆棧是可以自己控制的,所以可以加入并發(fā)或者錯誤邊界等功能。 文章首發(fā)于個人博客 前言 2016 年都已經(jīng)透露出來的概念,這都 9102 年了,我才開始寫 Fiber 的文章,表示慚愧呀。不過現(xiàn)在好的是關于 Fiber 的資料已經(jīng)很豐富了,...
摘要:在探索抽象類前,先了解下如何在組件指令中獲取這些抽象類。下面示例描述在組建模板中如何創(chuàng)建如同其他抽象類一樣,通過屬性綁定元素,比如上例中,綁定的是會被渲染為注釋的元素,所以輸出也將是。你可以使用查詢模板引用變量來獲得抽象類。 原文鏈接:Exploring Angular DOM manipulation techniques using ViewContainerRef如果想深入學習 ...
摘要:我們不想要因為重新創(chuàng)建元素而失去它的選中狀態(tài),聚焦狀態(tài)和顯示內(nèi)容。幸好這個問題有一個簡單的修復方式,他并不在應用中常見。那么會執(zhí)行類似于下面的代碼的狀態(tài)并不會改變 如果React在更新中只重用與元素類型相匹配的宿主實例,那按渲染條件選擇的內(nèi)容怎么辦呢?正如下面的代碼,假如我們開始至需要一個input,但稍后需要在它之前渲染一個message : // 第一次渲染 ReactDOM.re...
閱讀 2511·2021-11-22 09:34
閱讀 3131·2021-10-25 09:43
閱讀 2045·2021-10-11 10:59
閱讀 3461·2021-09-22 15:13
閱讀 2380·2021-09-04 16:40
閱讀 465·2019-08-30 15:53
閱讀 3248·2019-08-30 11:13
閱讀 2653·2019-08-29 17:30