摘要:模板北京時間數據渲染數據渲染將數據和模板綁定在渲染聲明式渲染和普通模板不同的是,模板寫在文件中,而不是的標簽中。創建模板容器類北京時間渲染指令數據只用于存放可變的數據。北京時間通過算法計算如何更新視圖。
React 發展很快,概念也多,本文目的在于幫助初學者理清 React 核心概念。
React 及 React 生態
React 的核心概念只有 2 點:
聲明式渲染(Declarative)
基于組件(Component-Based)
聲明式渲染 聲明式與命令式命令式編程:命令“機器”如何去做事情(how),這樣不管你想要的是什么(what),它都會按照你的命令實現。
聲明式編程:告訴“機器”你想要的是什么(what),讓機器想出如何去做(how)。
舉例:
// 命令式關注如何做(how) var numbers = [1,2,3,4,5] var doubled = [] for(var i = 0; i < numbers.length; i++) { var newNumber = numbers[i] * 2 doubled.push(newNumber) } console.log(doubled) //=> [2,4,6,8,10]
遍歷整個數組,取出每個元素,乘以二,然后把翻倍后的值放入新數組,每次都要操作這個雙倍數組,直到計算完所有元素。
// 聲明式關注做什么(what) var numbers = [1,2,3,4,5] var doubled = numbers.map(function(n) { return n * 2 }) console.log(doubled) //=> [2,4,6,8,10]
map 函數所作的事情是將直接遍歷整個數組的過程歸納抽離出來,讓我們專注于描述我們想要的是什么(what)。
模板渲染渲染:模板 => HTML => 頁面視圖
發生在服務器的叫后端模板渲染,公司用的是velocity。
發生在客戶端的叫前端模板渲染,常用的有 artTemplate。
以 artTemplate 為例。
模板
數據
渲染
setInterval(function() { // 數據 var data = { date: new Date() }; // 渲染(將數據和模板綁定在) var html = template("test", data); // 渲染 document.getElementById("container").innerHTML = html; },100)React 聲明式渲染
和普通模板不同的是,React 模板寫在 JS 文件中,而不是 html 的 標簽中。能使用所有 JS 語法,而不只有模板語法,所以更加靈活。
function formatName(user) { return user.firstName + " " + user.lastName; } // 數據 const user = { firstName: "Harper", lastName: "Perez" }; // 模板 const element = (Hello, {formatName(user)}!
); // 渲染 ReactDOM.render( element, document.getElementById("root") );
React 可局部渲染,且只渲染改變了的數據。純模板只能整體渲染。
高效的局部渲染意味著,開發者 只需要維護可變的數據 state (what) ,讓 react 框架幫助我們處理 DOM 操作(what)。
// React.createClass 創建模板容器(類) class Clock extends Component { render() { return (); } } setInterval(function() { // ReactDOM.render 渲染指令 ReactDOM.render( // date 數據北京時間: { this.props.date.toLocaleTimeString() }
, document.getElementById("container") ); }, 100);
state 只用于存放可變的數據。
通過 setState 告訴 react 什么數據變了,React 會自動更新數據改變部分的視圖
class Clock extends Component { // 初始化 constructor(props) { super(props); // state 只用于存放可變的狀態 this.state = {date: new Date()}; } // 初始化完成后執行 componentDidMount() { setInterval(() => { // setState 在修改 state 參數后會自動調用 render 方法。 this.setState({ date: new Date() }) },100) } render() { return北京時間: { this.state.date.toLocaleTimeString() }
} } ReactDOM.render(, document.getElementById("js-main") );
React 通過 diffing 算法計算如何更新視圖。而 diffing 算法有個 的假設前提,開發人員會提供給長列表的每個子項一個 ID,幫助算法進行對比。
function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) =>
初始化的渲染流程分為 3 步。
第一步,開發者使用 JSX 語法寫 React,babel 會將 JSX 編譯為瀏覽器能識別的 React JS 語法。這一步,一般配合 webpack 在本地進行。
第二步,執行 ReactDOM.render 函數,渲染出虛擬DOM。
第三步,react 將虛擬DOM,渲染成真實的DOM。
頁面更新的流程同樣也是 3 步。
第一步,當頁面需要更新時,通過聲明式的方法,調用 setState 告訴 react。
第二步,react 自動調用組件的 render 方法,渲染出虛擬 DOM。
第三步,react 會通過 diffing 算法,對比當前虛擬 DOM 和需要更新的虛擬 DOM 有什么區別。然后重新渲染區別部分的真實 DOM。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80871.html
摘要:元素和組件實例都不表示真實元素。我希望這篇文章能夠幫助你理清這些術語參考資料翻譯成支撐實例來自于理解中方法創建組件的聲明式編程和命令式編程的比較對循環提示增加的研究精髓之一算法 本篇為譯文,原文出處:React Elements vs React Components vs Component Backing Instances 許多人可能聽說過 Facebook 的 React 庫,...
摘要:技術路線的選擇技術學習內容匯總技術路線的選擇項目的技術路線是使用構建一套前端應用,更加具體的技術路線實際上是,應用到了技術棧加上了最新版的。不管怎么說,以這次項目對的使用體驗挺好。本次項目沒有使用開源的要求,自然是最好的選擇。 寫這篇總結的意義:總結,回顧,反思項目進行過程和這套Vue + ArcGIS API for JavaScriptGIS前端應用技術路線,從項目與技術兩個方面積...
摘要:寫在最前原文首發于作者的知乎專欄中間件思想遇見的靈感附,感興趣的同學可以知乎關注,進行交流。其中,最重要的一個便是對多線程的支持。在中提出了工作線程的概念,并且規范出的三大主要特征能夠長時間運行響應理想的啟動性能以及理想的內存消耗。 寫在最前 原文首發于作者的知乎專欄:React Redux 中間件思想遇見 Web Worker 的靈感(附demo),感興趣的同學可以知乎關注,進行交流...
摘要:表示調用棧在下一將要執行的任務。兩方性能解藥我們一般有兩種方案突破上文提到的瓶頸將耗時高成本高易阻塞的長任務切片,分成子任務,并異步執行這樣一來,這些子任務會在不同的周期執行,進而主線程就可以在子任務間隙當中執行更新操作。 showImg(https://segmentfault.com/img/remote/1460000016008111); 性能一直以來是前端開發中非常重要的話題...
閱讀 811·2021-09-22 16:01
閱讀 2101·2021-08-20 09:37
閱讀 1702·2019-08-30 15:54
閱讀 1702·2019-08-30 15:44
閱讀 849·2019-08-28 18:23
閱讀 3025·2019-08-26 12:17
閱讀 1027·2019-08-26 11:56
閱讀 1549·2019-08-23 16:20