摘要:但多頁應用不用考慮新舊頁面的變化,一個多頁應用每一頁都會重新建立。下面咱們圍繞一個單頁應用的,來細說。如果沒有這兩個庫,我們是沒法創建應用的。結束語本篇文章大概講了怎么創建一個單頁應用,讓大家了解一下。
好久沒寫文章了,今天來分享一篇 關于 react 的 helloWord 。如果你也是剛開始學習react,或者已經久仰 react 并開始著手學習,那或許這篇文章能給你一點啟發。
文章圍繞一個小案例來學習 -- 創建一個簡單的單頁應用
一、了解什么是單頁應用,什么是多頁應用
1、以前你做的或看到的網站可能包含多個多帶帶的網頁,主頁一個導航,點開打開另一個網頁,這就是傳統的多頁應用。多頁應用有什么優缺點呢?
首先對用戶的體驗不是很好,銷毀一個網頁,再重新打開另一個網頁。其次數據的傳遞也不是很便利,利用cookie和服務端來保存用戶數據是一種普遍的處理方式,但是 不 方 便 。但多頁應用不用考慮新舊頁面的變化,一個多頁應用每一頁都會重新建立。
2、單頁應用(SAP),單頁應用不需要重新加載整個頁面,單頁應用可以對整個頁面進行區塊化劃分,加載和卸載某一塊區塊。在單頁應用中,我們的大部分時間會花在保持數據與 UI 同步上。
那單頁應用有什么缺陷嗎?有地,不如單頁應用回頻繁的操作dom ,對節點的刪除和添加,這樣加大了瀏覽器對性能的要求。
二、react的出現
首先單頁應用無疑來說對用戶的體驗更加友好的,那么站在用戶的角度,我們只要解決單頁應用的缺陷不就兩全其美了。
Facebook (和 Instagram) 覺得該解決這些問題了。在經歷了足夠的單頁應用實踐后,他們發布了一個叫做 React 的庫。
react 并不關心UI 開始是什么狀態,只關心UI的最終狀態。因為 DOM 操作是真的很慢,所以React不會直接 修改 DOM,而是修改內存中的虛擬 DOM,React在每次需要渲染時,會先比較當前DOM內容和待渲染內容的差異,然后再決定如何最優地更新DOM。
或許你聽說過 MVC MVP MVVC 等一些設計模式,你可以吧 react 當中 V 層,也就是 view 層,專門來負責 ui 的處理,react 把頁面的各個功能分成一小塊(俗稱組件),更新頁面的時候只更新改動過的組件即可。
三、開始進入正題。
下面咱們圍繞一個 單頁應用的demo ,來細說 react 。
思路是這樣的 ,先講解一下 react 的一些新知識和概念 -- 上代碼 -- 對代碼進行解釋 -- 總結
1、依賴庫
第一行引入 核心 React 庫,第二行引入 React DOM 庫。如果沒有這兩個庫,我們是沒法創建 React 應用的。
Web 應用(以及瀏覽器顯示的其它一切)是由 HTML、CSS 和 JavaScript 組成的:所以,我們還需要在兩個 script 標記下添加對 Babel JavaScript 編譯器的引用:
Babel 可以做很多很酷的事情,但是我們關心的是將 JSX 變成 JavaScript 的能力。 JSX 下面解釋。
添加
ReactRouter 為由 React 創建的單頁應用提供了路由能力.因為在原始的多頁應用中,地址欄 url 是實時對應你訪問頁面的地址的。但在單頁應用中,組件的替換或添加不能在地址欄url實時對應,當用戶刷新或后退網頁,就不在對應用戶原先訪問的那個頁面了。所以 ReactRouter 是來幫咱們解決這一問題的一個 js庫
應用模板:
React Components
2、JSX
JSX 你可以把它看做可以寫 js 和 html 的混合標記。我們通常在 js 里面動態的創建一個html元素是這樣的:
var xxx = document.createElement("div"); xxx.className = "xxx"; xxx.xxx ....... xxx.appendChild(xxx);
但有了 JSX ,你就可以這樣:
運行上面的代碼是在 body 顯示 Batman 的字樣 ,后面會解釋 ,反正要創建 html元素,直接寫 html語法就可以了,是不是很酷。
3、組件的概念
單頁應用最重要的就是將頁面組件化。
最開始我們創建組件的方式是用 React.createClass
一個簡單的 helloword組件:
var HelloWorld = React.createClass({ render: function() { return (你好,react 組件!
); } });
上面是利用 React.createClass 創建一個組件,組件有一個強制性的屬性render,render方法的return 返回組件的內容。
組件的引用:
ReactDOM.render(, document.body );
render 將 HelloWorld組件添加到 body 中
也許你會很好奇在瀏覽器上顯示是什么結構的:
4、一個單頁應用的demo
有了上面的基礎知識,咱們利用demo進一步學習。
效果圖:點擊 nav 會切換不同的頁面,但注意是單頁的!
(1)、創建導航條組件
var App = React.createClass({ render: function() { return () } });Simple SPA
- Home
- Stuff
- Contact
上面簡單的創建了個導航條的組件,其中 ``
(2)、創建 Home 組件:
var Home = React.createClass({ render: function() { return (); } });HELLO
Cras facilisis urna ornare ex volutpat, et convallis erat elementum. Ut aliquam, ipsum vitae gravida suscipit, metus dui bibendum est, eget rhoncus nibh metus nec massa. Maecenas hendrerit laoreet augue nec molestie. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Duis a turpis sed lacus dapibus elementum sed eu lectus.
到這里應該比較能適應 React 創建組件的方式了吧。 render方法里面有個 return 來返回組件的內容。
(3)、創建 Contact 和 Stuff 組件:
var Contact = React.createClass({ render: function() { return (); } }); var Stuff = React.createClass({ render: function() { return (GOT QUESTIONS?
The easiest thing to do is post on our forums.
); } });STUFF
Mauris sem velit, vehicula eget sodales vitae, rhoncus eget sapien:
- Nulla pulvinar diam
- Facilisis bibendum
- Vestibulum vulputate
- Eget erat
- Id porttitor
(5)、往導航條添加鏈接
組件都創建好了,接下來就是怎么將組件對應起來咯,
var App = React.createClass({ render: function() { return () } });Simple SPA
Home - Stuff
- Contact
{this.props.children}
App 是剛開始創建的導航條組件,這里咱們用到了一個 React Router 的 Link 組件,其實它是跟 類似 ,但提供的功能更多 , to 就好比 的 href ,指向一個鏈接。 (6)、加載組件 上面用到了 Route 組件, 當你訪問的 url為 /stuff 時就加載組件 Stuff(Stuff組件咱們前面已經寫好了),當你訪問 url 為 /Contact 時 就加載組件 Contact,那訪問 url 為 / 呢 ,那就加載 `IndexRoute ,這也是 IndexRoute 不同于組件 Route `。 那結合第五部統一分析下: Link to 是給 組件`` Stuff指定了鏈接 , Route組件是給 鏈接定義了對應的組件,最后由 來加載顯示出對應的組件。 結束語: 下面上完整代碼: 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91154.html
那上面代碼就好理解啦,to=“/" 就是指向當前鏈接 , to="/stuff" 就是指向 /stuff 鏈接。
細心的你還會發現第一個 li 是 IndexLink組件 ,這個跟Link有什么不同呢。IndexLink組件是用來初始化時候指定的鏈接。
咱們在
上面那幾步都是創建了組件,怎么把組件加載到頁面中還得利用 ReactDOM.renderReactDOM.render(
如下,
那么,
{this.props.children}
本篇文章大概講了 react 怎么創建一個單頁應用,讓大家了解一下react 。很對具體的知識點多略過,想深入學習可以看以下這些教程:
React Router 使用教程
React 簡介
摘要:今天我們將討論創建組件的最終方案,即無狀態函數的純組件。今天我們正在研究一種處理提出的復雜數據的方法,稱為體系結構。第天部署介紹今天,我們將探討部署我們的應用所涉及的不同部分,以便外界可以使用我們的應用。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3758原文:https://www.fullstackreact.com/3...
摘要:本文轉載自眾成翻譯譯者鏈接原文今天,我們將添加一個構建過程來存儲常見的構建操作,以便我們可以輕松地開發和部署我們的應用。在要創建應用的目錄中打開終端窗口。文件有一個的節點,這個應用本身將被自動掛載這是在文件中處理的。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3822原文:https://www.fullstackreact...
摘要:本文轉載自眾成翻譯譯者鏈接原文今天,我們從一開始就開始。讓我們看看是什么,是什么讓運轉起來。什么是是一個用于構建用戶界面的庫。它是應用程序的視圖層。所有應用程序的核心是組件。組件是可組合的。虛擬完全存在于內存中,并且是網絡瀏覽器的的表示。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3765原文:https://www.ful...
摘要:我們的第一個假設是非常簡單的測試。我們正在測試以確保元素被包裝在類中。在我們編寫的每個測試中我們都需要將應用呈現在工作測試文檔中。作為提醒我們可以使用命令或命令來運行測試。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3804原文:https://www.fullstackreact.com/30-days-of-react/...
摘要:但是使用標記將告訴瀏覽器處理路由就像服務器端路由一樣。組件需要一個稱為的屬性指向要渲染的客戶端路由。發生這種情況的原因是響應路由器將渲染與路徑匹配的所有內容除非另有指定。屬性預計將是一個函數將在對象連同和路由配置時調用。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3815原文:https://www.fullstackrea...
閱讀 3055·2023-04-26 03:01
閱讀 3546·2023-04-25 19:54
閱讀 1598·2021-11-24 09:39
閱讀 1381·2021-11-19 09:40
閱讀 4260·2021-10-14 09:43
閱讀 2077·2019-08-30 15:56
閱讀 1501·2019-08-30 13:52
閱讀 1668·2019-08-29 13:05