<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ReactJs快速入門教程(精華版)

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 20:26:09
        文檔

        ReactJs快速入門教程(精華版)

        ReactJs快速入門教程(精華版):現(xiàn)在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了ReactJS,ReactJs的虛擬DOM(Virtual DOM)和組件化的開發(fā)深深的吸引了我,下面來跟我一起領(lǐng)略ReactJs的風(fēng)采吧~~ 文章有點長,耐心讀完,你會有很大收獲哦~ 一、ReactJS簡介 Re
        推薦度:
        導(dǎo)讀ReactJs快速入門教程(精華版):現(xiàn)在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了ReactJS,ReactJs的虛擬DOM(Virtual DOM)和組件化的開發(fā)深深的吸引了我,下面來跟我一起領(lǐng)略ReactJs的風(fēng)采吧~~ 文章有點長,耐心讀完,你會有很大收獲哦~ 一、ReactJS簡介 Re
        現(xiàn)在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了ReactJS,ReactJs的虛擬DOM(Virtual DOM)和組件化的開發(fā)深深的吸引了我,下面來跟我一起領(lǐng)略ReactJs的風(fēng)采吧~~ 文章有點長,耐心讀完,你會有很大收獲哦~

        一、ReactJS簡介

          React 起源于 Facebook 的內(nèi)部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設(shè) Instagram 的網(wǎng)站。做出來以后,發(fā)現(xiàn)這套東西很好用,就在2013年5月開源了。由于 React 的設(shè)計思想極其獨特,屬于革命性創(chuàng)新,性能出眾,代碼邏輯卻非常簡單。所以,越來越多的人開始關(guān)注和使用,認為它可能是將來 Web 開發(fā)的主流工具。

        ReactJS官網(wǎng)地址:http://facebook.github.io/react/

        Github地址:https://github.com/facebook/react

        ReactJs快速入門教程(精華版)

        二、對ReactJS的認識及ReactJS的優(yōu)點

        首先,對于React,有一些認識誤區(qū),這里先總結(jié)一下:

        React不是一個完整的MVC框架,最多可以認為是MVC中的V(View),甚至React并不非常認可MVC開發(fā)模式;

        React的服務(wù)器端Render能力只能算是一個錦上添花的功能,并不是其核心出發(fā)點,事實上React官方站點幾乎沒有提及其在服務(wù)器端的應(yīng)用;

        有人拿React和Web Component相提并論,但兩者并不是完全的競爭關(guān)系,你完全可以用React去開發(fā)一個真正的Web Component;

        React不是一個新的模板語言,JSX只是一個表象,沒有JSX的React也能工作。

        1、ReactJS的背景和原理

          在Web開發(fā)中,我們總需要將變化的數(shù)據(jù)實時反應(yīng)到UI上,這時就需要對DOM進行操作。而復(fù)雜或頻繁的DOM操作通常是性能瓶頸產(chǎn)生的原因(如何進行高性能的復(fù)雜DOM操作通常是衡量一個前端開發(fā)人員技能的重要指標)。React為此引入了虛擬DOM(Virtual DOM)的機制:在瀏覽器端用Javascript實現(xiàn)了一套DOM API。基于React進行開發(fā)時所有的DOM構(gòu)造都是通過虛擬DOM進行,每當數(shù)據(jù)變化時,React都會重新構(gòu)建整個DOM樹,然后React將當前整個DOM樹和上一次的DOM樹進行對比,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅將需要變化的部分進行實際的瀏覽器DOM更新。而且React能夠批處理虛擬DOM的刷新,在一個事件循環(huán)(Event Loop)內(nèi)的兩次數(shù)據(jù)變化會被合并,例如你連續(xù)的先將節(jié)點內(nèi)容從A變成B,然后又從B變成A,React會認為UI不發(fā)生任何變化,而如果通過手動控制,這種邏輯通常是極其復(fù)雜的。盡管每一次都需要構(gòu)造完整的虛擬DOM樹,但是因為虛擬DOM是內(nèi)存數(shù)據(jù),性能是極高的,而對實際DOM進行操作的僅僅是Diff部分,因而能達到提高性能的目的。這樣,在保證性能的同時,開發(fā)者將不再需要關(guān)注某個數(shù)據(jù)的變化如何更新到一個或多個具體的DOM元素,而只需要關(guān)心在任意一個數(shù)據(jù)狀態(tài)下,整個界面是如何Render的。

        如果你像在90年代那樣寫過服務(wù)器端Render的純Web頁面那么應(yīng)該知道,服務(wù)器端所要做的就是根據(jù)數(shù)據(jù)Render出HTML送到瀏覽器端。如果這時因為用戶的一個點擊需要改變某個狀態(tài)文字,那么也是通過刷新整個頁面來完成的。服務(wù)器端并不需要知道是哪一小段HTML發(fā)生了變化,而只需要根據(jù)數(shù)據(jù)刷新整個頁面。換句話說,任何UI的變化都是通過整體刷新來完成的。而React將這種開發(fā)模式以高性能的方式帶到了前端,每做一點界面的更新,你都可以認為刷新了整個頁面。至于如何進行局部更新以保證性能,則是React框架要完成的事情。

          借用Facebook介紹React的視頻中聊天應(yīng)用的例子,當一條新的消息過來時,傳統(tǒng)開發(fā)的思路如上圖,你的開發(fā)過程需要知道哪條數(shù)據(jù)過來了,如何將新的DOM結(jié)點添加到當前DOM樹上;而基于React的開發(fā)思路如下圖,你永遠只需要關(guān)心數(shù)據(jù)整體,兩次數(shù)據(jù)之間的UI如何變化,則完全交給框架去做??梢钥吹剑褂肦eact大大降低了邏輯復(fù)雜性,意味著開發(fā)難度降低,可能產(chǎn)生Bug的機會也更少。

        2、組件化

          虛擬DOM(virtual-dom)不僅帶來了簡單的UI開發(fā)邏輯,同時也帶來了組件化開發(fā)的思想,所謂組件,即封裝起來的具有獨立功能的UI部件。React推薦以組件的方式去重新思考UI構(gòu)成,將UI上每一個功能相對獨立的模塊定義成組件,然后將小的組件通過組合或者嵌套的方式構(gòu)成大的組件,最終完成整體UI的構(gòu)建。例如,F(xiàn)acebook的instagram.com整站都采用了React來開發(fā),整個頁面就是一個大的組件,其中包含了嵌套的大量其它組件,大家有興趣可以看下它背后的代碼。

        如果說MVC的思想讓你做到視圖-數(shù)據(jù)-控制器的分離,那么組件化的思考方式則是帶來了UI功能模塊之間的分離。我們通過一個典型的Blog評論界面來看MVC和組件化開發(fā)思路的區(qū)別。

        對于MVC開發(fā)模式來說,開發(fā)者將三者定義成不同的類,實現(xiàn)了表現(xiàn),數(shù)據(jù),控制的分離。開發(fā)者更多的是從技術(shù)的角度來對UI進行拆分,實現(xiàn)松耦合。

        對于React而言,則完全是一個新的思路,開發(fā)者從功能的角度出發(fā),將UI分成不同的組件,每個組件都獨立封裝。

        在React中,你按照界面模塊自然劃分的方式來組織和編寫你的代碼,對于評論界面而言,整個UI是一個通過小組件構(gòu)成的大組件,每個組件只關(guān)心自己部分的邏輯,彼此獨立。

        ReactJs快速入門教程(精華版)

        React認為一個組件應(yīng)該具有如下特征:

        (1)可組合(Composeable):一個組件易于和其它組件一起使用,或者嵌套在另一個組件內(nèi)部。如果一個組件內(nèi)部創(chuàng)建了另一個組件,那么說父組件擁有(own)它創(chuàng)建的子組件,通過這個特性,一個復(fù)雜的UI可以拆分成多個簡單的UI組件;

        (2)可重用(Reusable):每個組件都是具有獨立功能的,它可以被使用在多個UI場景;

        (3)可維護(Maintainable):每個小的組件僅僅包含自身的邏輯,更容易被理解和維護;

        二、下載ReactJS,編寫Hello,world

          ReactJs下載非常簡單,為了方便大家下載,這里再一次給出下載地址http://facebook.github.io/react/downloads.html,下載完成后,我么看到的是一個壓縮包。解壓后,我們新建一個html文件,引用react.js和JSXTransformer.js這兩個js文件。html模板如下(js路徑改成自己的):

        <!DOCTYPE html>
        <html>
         <head>
         <script src="build/react.js"></script>
         <script src="build/JSXTransformer.js"></script>
         </head>
         <body>
         <div id="container"></div>
         <script type="text/jsx">
         // ** Our code goes here! **
         </script>
         </body>
        </html>

          這里大家可能會奇怪,為什么script的type是text/jsx,這是因為 React 獨有的 JSX 語法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type="text/jsx" 。 其次,React 提供兩個庫: react.js 和 JSXTransformer.js ,它們必須首先加載。其中,JSXTransformer.js 的作用是將 JSX 語法轉(zhuǎn)為 JavaScript 語法。這一步很消耗時間,實際上線的時候,應(yīng)該將它放到服務(wù)器完成。

        到這里我們就可以開始編寫代碼了,首先我們先來認識一下ReactJs里面的React.render方法:

        React.render 是 React 的最基本方法,用于將模板轉(zhuǎn)為 HTML 語言,并插入指定的 DOM 節(jié)點。

        下面我們在script標簽里面編寫代碼,來輸出Hello,world,代碼如下:

        React.render(
         <h1>Hello, world!</h1>,
         document.getElementById('container')
         );

        這里需要注意的是,react并不依賴jQuery,當然我們可以使用jQuery,但是render里面第二個參數(shù)必須使用JavaScript原生的getElementByID方法,不能使用jQuery來選取DOM節(jié)點。

        然后,在瀏覽器打開這個頁面,就可以看到瀏覽器顯示一個大大的Hello,world,因為我們用了<h1>標簽。

        到這里,恭喜,你已經(jīng)步入了ReactJS的大門~~下面,讓我們來進一步學(xué)習(xí)ReactJs吧~~

        三、Jsx語法

          HTML 語言直接寫在 JavaScript 語言之中,不加任何引號,這就是 JSX 的語法,它允許 HTML 與 JavaScript 的混寫,了解過AngularJs的看到下面的代碼一定會感覺很熟悉的,我們來看代碼:

        var names = ['Jack', 'Tom', 'Alice'];
         React.render(
         <div>
         {
         names.map(function (name) {
         return <div>Hello, {name}!</div>
         })
         }
         </div>,
         document.getElementById('container')
         );

        這里我們聲明了一個names數(shù)組,然后遍歷在前面加上Hello,輸出到DOM中,輸出結(jié)果如下:

        JSX 允許直接在模板插入 JavaScript 變量。如果這個變量是一個數(shù)組,則會展開這個數(shù)組的所有成員,代碼如下:

        var arr = [
         <h1>Hello world!</h1>,
         <h2>React is perfect!</h2>,
         ];
         React.render(
         <div>*{arr}*</div>,
         document.getElementById('container')
         );

        顯示結(jié)果如下:

        ReactJs快速入門教程(精華版)

        這里的星號只是做標識用的,大家不要被她迷惑了~~

        你看到這里,說明你對React還是蠻感興趣的,恭喜你,堅持下來了,那么下面,我們開始學(xué)習(xí)React里面的"真功夫"了~~ Are you ready?

        四、ReactJS組件

        1、組件屬性

          前面說了,ReactJS是基于組件化的開發(fā),下面我們開始來學(xué)習(xí)ReactJS里面的組件,React 允許將代碼封裝成組件(component),然后像插入普通 HTML 標簽一樣,在網(wǎng)頁中插入這個組件。React.createClass 方法就用于生成一個組件類。

        下面,我們來編寫第一個組件Greet,有一個name屬性,然后輸出hello + name的值,代碼如下:

        var Greet = React.createClass({
         render: function() {
         return <h1>Hello {this.props.name}</h1>;
         }
         });
         React.render(
         <Greet name="Jack" />,
         document.getElementById('container')
         );

        看到這段代碼,接觸過AngularJS的朋友們是不是有一種熟悉的感覺,不過這里有幾點需要注意:

          1、獲取屬性的值用的是this.props.屬性名

          2、創(chuàng)建的組件名稱首字母必須大寫。

          3、為元素添加css的class時,要用className.

          4、組件的style屬性的設(shè)置方式也值得注意,要寫成style={{width: this.state.witdh}}

        2、組件狀態(tài)

          組件免不了要與用戶互動,React 的一大創(chuàng)新,就是將組件看成是一個狀態(tài)機,一開始有一個初始狀態(tài),然后用戶互動,導(dǎo)致狀態(tài)變化,從而觸發(fā)重新渲染 UI 。下面我們來編寫一個小例子,一個文本框和一個button,通過點擊button可以改變文本框的編輯狀態(tài),禁止編輯和允許編輯。通過這個例子來理解ReactJS的狀態(tài)機制。先看代碼:

        var InputState = React.createClass({
         getInitialState: function() {
         return {enable: false};
         },
         handleClick: function(event) {
         this.setState({enable: !this.state.enable});
         },
         render: function() {
         return (
         <p>
         <input type="text" disabled={this.state.enable} />
         <button onClick={this.handleClick}>Change State</button>
         </p>
         );
         }
         });
         React.render(
         <InputState />,
         document.getElementById('container')
         );

        這里,我們又使用到了一個方法getInitialState,這個函數(shù)在組件初始化的時候執(zhí)行,必需返回NULL或者一個對象。這里我們可以通過this.state.屬性名來訪問屬性值,這里我們將enable這個值跟input的disabled綁定,當要修改這個屬性值時,要使用setState方法。我們聲明handleClick方法,來綁定到button上面,實現(xiàn)改變state.enable的值.效果如下:

        ReactJs快速入門教程(精華版)

        原理分析:

          當用戶點擊組件,導(dǎo)致狀態(tài)變化,this.setState 方法就修改狀態(tài)值,每次修改以后,自動調(diào)用 this.render 方法,再次渲染組件。

        這里值得注意的幾點如下:

          1、getInitialState函數(shù)必須有返回值,可以是NULL或者一個對象。

          2、訪問state的方法是this.state.屬性名。

          3、變量用{}包裹,不需要再加雙引號。

        3、組件的生命周期  

        組件的生命周期分成三個狀態(tài):

        Mounting:已插入真實 DOM

        Updating:正在被重新渲染

        Unmounting:已移出真實 DOM

        React 為每個狀態(tài)都提供了兩種處理函數(shù),will 函數(shù)在進入狀態(tài)之前調(diào)用,did 函數(shù)在進入狀態(tài)之后調(diào)用,三種狀態(tài)共計五種處理函數(shù)。

        componentWillMount()
        componentDidMount()
        componentWillUpdate(object nextProps, object nextState)
        componentDidUpdate(object prevProps, object prevState)
        componentWillUnmount()

        此外,React 還提供兩種特殊狀態(tài)的處理函數(shù)。

        componentWillReceiveProps(object nextProps):已加載組件收到新的參數(shù)時調(diào)用
        shouldComponentUpdate(object nextProps, object nextState):組件判斷是否重新渲染時調(diào)用

        下面來看一個例子:

        var Hello = React.createClass({
         getInitialState: function () {
         return {
         opacity: 1.0
         };
         },
         componentDidMount: function () {
         this.timer = setInterval(function () {
         var opacity = this.state.opacity;
         opacity -= .05;
         if (opacity < 0.1) {
         opacity = 1.0;
         }
         this.setState({
         opacity: opacity
         });
         }.bind(this), 100);
         },
         render: function () {
         return (
         <div style={{opacity: this.state.opacity}}>
         Hello {this.props.name}
         </div>
         );
         }
         });
         React.render(
         <Hello name="world"/>,
         document.body
         );

        上面代碼在hello組件加載以后,通過 componentDidMount 方法設(shè)置一個定時器,每隔100毫秒,就重新設(shè)置組件的透明度,從而引發(fā)重新渲染。

        4、組件的嵌套

          React是基于組件化的開發(fā),那么組件化開發(fā)最大的優(yōu)點是什么?毫無疑問,當然是復(fù)用,下面我們來看看React中到底是如何實現(xiàn)組件的復(fù)用的,這里我們還寫一個例子來說吧,代碼如下:

        var Search = React.createClass({
         render: function() {
         return (
         <div>
         {this.props.searchType}:<input type="text" />
         <button>Search</button>
         </div>
         );
         }
         });
         var Page = React.createClass({
         render: function() {
         return (
         <div>
         <h1>Welcome!</h1>
         <Search searchType="Title" />
         <Search searchType="Content" />
         </div>
         );
         }
         });
         React.render(
         <Page />,
         document.getElementById('container')
         );

        這里我們創(chuàng)建了一個Search組件,然后又創(chuàng)建了一個Page組件,然后我們在Page組件中調(diào)用Search組件,并且調(diào)用了兩次,這里我們通過屬性searchType傳入值,最終顯示結(jié)果如圖:

        ReactJs快速入門教程(精華版)

        五、ReactJs小結(jié)

        關(guān)于ReactJS今天就先學(xué)習(xí)到這里了,下面來總結(jié)一下,主要有以下幾點:

          1、ReactJs是基于組件化的開發(fā),所以最終你的頁面應(yīng)該是由若干個小組件組成的大組件。

          2、可以通過屬性,將值傳遞到組件內(nèi)部,同理也可以通過屬性將內(nèi)部的結(jié)果傳遞到父級組件(留給大家研究);要對某些值的變化做DOM操作的,要把這些值放到state中。

          3、為組件添加外部css樣式時,類名應(yīng)該寫成className而不是class;添加內(nèi)部樣式時,應(yīng)該是style={{opacity: this.state.opacity}}而不是style="opacity:{this.state.opacity};"。

          4、組件名稱首字母必須大寫。

          5、變量名用{}包裹,且不能加雙引號。

        以上所述是小編給大家介紹的ReactJs快速入門教程(精華版),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對PHP中文網(wǎng)的支持!

        更多ReactJs快速入門教程(精華版)相關(guān)文章請關(guān)注PHP中文網(wǎng)!

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ReactJs快速入門教程(精華版)

        ReactJs快速入門教程(精華版):現(xiàn)在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了ReactJS,ReactJs的虛擬DOM(Virtual DOM)和組件化的開發(fā)深深的吸引了我,下面來跟我一起領(lǐng)略ReactJs的風(fēng)采吧~~ 文章有點長,耐心讀完,你會有很大收獲哦~ 一、ReactJS簡介 Re
        推薦度:
        標簽: 教程 js re
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一级毛片不卡片免费观看| 男女一进一出抽搐免费视频| 精品熟女少妇a∨免费久久| 久久伊人久久亚洲综合| 国产午夜无码精品免费看| 亚洲一区二区三区夜色| 99视频在线免费看| 亚洲AV一二三区成人影片| 成年人免费观看视频网站| 亚洲av无码专区在线观看下载| 午夜成年女人毛片免费观看| 在线观看国产一区亚洲bd| 在线a亚洲v天堂网2018| 中文永久免费观看网站| 久热综合在线亚洲精品| 国产h肉在线视频免费观看| 久久综合久久综合亚洲| 免费a级毛片大学生免费观看| 国产vA免费精品高清在线观看| 久久精品国产亚洲| 国国内清清草原免费视频99| 亚洲精品国产高清在线观看| 亚洲精品无码成人片在线观看| 中文字幕视频在线免费观看| 亚洲精品456在线播放| 尤物永久免费AV无码网站| 一区二区三区视频免费观看| 日韩精品一区二区亚洲AV观看| 国产一精品一AV一免费孕妇| 爱情岛论坛免费视频| 亚洲国产精品久久久久网站 | 97国免费在线视频| 亚洲天堂在线播放| 精品久久洲久久久久护士免费 | 免费观看激色视频网站(性色)| 亚洲国产欧美日韩精品一区二区三区 | 亚洲av无码专区首页| 亚洲国产精品一区第二页| 国产香蕉九九久久精品免费| 中国一级特黄高清免费的大片中国一级黄色片 | 久久综合亚洲鲁鲁五月天|