從零學習React技術棧:JSX 入門

    JSX 其是一個語法擴展,它既不是單純的字符串,也不是 HTML,雖然長得和 HTML 很像甚至基本上看起來一樣。愛掏網 - it200.com但事實上它是 React 內部實現的一種,允許我們直接在 JS 里書寫 UI 的方式。愛掏網 - it200.com

    有些同學來看 JSX 可能也會覺得它像一種模板語言之類的。愛掏網 - it200.com事實上也不是,它就是基于 JavaScript,在 React 當中的一種語法擴展的實現。愛掏網 - it200.com

    JSX 被用來創建 React 當中的 Elements,React 當中的元素。愛掏網 - it200.com然后 React 再通過一些方法,把 JSX 創建的元素,渲染成我們在瀏覽器當中看到的 DOM元素。愛掏網 - it200.com

    在正式介紹 JSX 的相關知識前,我再強調幾遍:

    JSX 盡管使用了非常多的類似 HTML 的標簽語法,但 JSX 只是一種在 JavaScript 當中書寫 UI 的實現,所以你在理解的時候不要把 HTML 的相關知識先入為主地代入。愛掏網 - it200.com不要問為什么可以這樣寫,怎么能這么寫,怎么和 HTML 不一樣?一類的問題,因為本來就不是同一種東西,另外也不要覺得 JSX 奇怪,不要覺得不適應,你寫寫就適應了。愛掏網 - it200.com而且相信我,JSX 已經是書寫 UI 最高效還保持了良好可讀性的一種實現了。愛掏網 - it200.com

    另外 JSX 也有一些和 HTML 語法的差異,本篇教程的內容不可能涵蓋全部,但以后出現在教程代碼中的特例我都會強調說明。愛掏網 - it200.com

    我們想要在瀏覽器里直接運行采用 JSX 語法的 JavaScript 顯然暫時是不可能實現的,在實際的生產過程中,我們需要利用 Babel 一類的轉譯器來將我們的 JSX 語法或者 ES6 語法轉譯成瀏覽器可以直接運行的 JavaScript,事實上 JSX 在經過轉譯之后,會變成 React 創建 Element 的一個方法:

    ReactDOM.render( 
        

    Hello world!

    , document.getElementById('container') )

    轉譯之后就會變成下面這樣:

    // 事實上你書寫的所有標簽語法最后都會被轉換成創建元素的 JS 方法。愛掏網 - it200.com
    ReactDOM.render(
        React.createElement('p',null,`Hello world!`),
        document.getElementById('container')
    )
    

    在本地配置 React 的開發環境是相對來說比較復雜的操作。愛掏網 - it200.com為了讓同學們盡快上手,我們一開始還是在在線代碼編輯器里編寫我們的代碼。愛掏網 - it200.com

    比如我們可以使用 React 官方推薦的 Codepen。愛掏網 - it200.com

    打開 Codepen 網站,當然為了方便你日后的學習,保存你的代碼,最好注冊一個賬號。愛掏網 - it200.com(注冊理所當然需要 Google 人機驗證等步驟,所以請自備梯子,學習編程這方面的技能早晚要掌握,如果你怎么都打不開這個網站或者怎么都注冊不好,可以先放過,老老實實使用大清局域網)。愛掏網 - it200.com

    之后我們新建一個 Pen,然后在 JS 編輯窗口的設置面板里添加 reactreact-dom 兩個庫,再將 preprocessor 預處理器設置成 Babel,確定保存,就可以開始愉快地編碼啦!

    看一個Codepen的在線示例:

    當然,如果你的網速較慢或者無法順利訪問到國際網絡,還可以使用離線Web應用 Codepan。愛掏網 - it200.com

    const title = 

    React Learning

    我們用JSX創建的元素對象一般來說是不變的,所以通過 const關鍵字來聲明一個 React元素,而不是我們以往經常使用的 var愛掏網 - it200.com

    為了能讓我們的 JSX 元素在頁面上渲染出來預覽查看,我們還需要添加兩段代碼:

    在 HTML 窗格里添加:

    
    

    在JS窗格的最底部添加:

    // 這便是將 JSX元素渲染成 DOM 的方法 
    ReactDOM.render(title,document.getElementById('root'))
    

    我們通過 ReactDOM 的 render 方法,將 title 元素渲染至 idroot 的頁面容器當中。愛掏網 - it200.com

    JSX 的標簽同樣可以擁有自己的屬性:

    const title = 

    React Learning

    但它和 HTML 又不是完全相同的,例如我們想要為 JSX標簽添加 class 的時候需要:

    // 注意是 className 而不是 class
    const title = 

    React Learning

    所有支持的 HTML屬性在這里可以查閱。愛掏網 - it200.com

    JSX 的標簽也可以像 HTML 一樣相互嵌套,一般有嵌套解構的 JSX 元素外面,我們習慣于為它加上一個小括號:

    const title = (
        
            

    React Learning

    Let's learn JSX

    )

    需要注意的是,JSX 在嵌套時,最外層有且只能有一個標簽,否則就會出錯喲:

    // 這是一個錯誤示例
    const title = ( 
        

    React Learning

    Let's learn JSX

    )

    在 JSX 元素中,我們同樣可以使用 JavaScript 表達式,在 JSX 當中的表達式需要用一個大括號括起來:

    function sayhi(name) {
        return 'Hi,' + name;
    }
    const title = (
        
            

    React Learning

    Let's learn JSX. {sayhi('you')}

    )

    好了,有關 JSX 的基礎知識,我們掌握到這里就差不多了。愛掏網 - it200.com在之后的課程中,隨著我們學習的進一步深入,也會在需要的時候介紹更深入的有關 JSX 的知識。愛掏網 - it200.com

    • Tutorial: JSX
    • Getting Started With React and JSX
    • Getting Started with React and JSX
    • Understand JSX at a Deeper Level

    余博倫

    知乎專欄【從零學習前端開發】作者,FreeCodeCamp中國發起人,React中文社區布道師。愛掏網 - it200.com致力于為前端初學者提供良心的干貨、暖心的教程、真心的分享。愛掏網 - it200.com微信公眾號 yunote。愛掏網 - it200.com

    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發表評論
    更多 網友評論0 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 精品乱码一区二区三区在线| 日韩免费观看一区| 亚洲国产精品第一区二区三区| 亚洲一区二区观看播放| 日韩国产免费一区二区三区| 日韩三级一区二区三区| 一区二区三区四区电影视频在线观看| 精品一区二区三区在线观看| 无码日韩精品一区二区免费暖暖| 交换国产精品视频一区| 日韩精品福利视频一区二区三区| 亚洲午夜日韩高清一区| 久久国产免费一区| 日本一区二区三区在线看| 成人乱码一区二区三区av| 97av麻豆蜜桃一区二区| 国产伦精品一区二区三区免.费| 国产AV国片精品一区二区| 一区高清大胆人体| 福利片福利一区二区三区| 久久99精品一区二区三区| 国内精品一区二区三区最新| 任你躁国产自任一区二区三区| 亚洲制服丝袜一区二区三区| 亚洲AV永久无码精品一区二区国产 | 国产一区二区精品在线观看| 国产在线精品一区二区中文| 亚洲日韩一区精品射精| 91国在线啪精品一区| 中文字幕av人妻少妇一区二区| 成人国产一区二区三区| 精品午夜福利无人区乱码一区| 爆乳熟妇一区二区三区霸乳 | 精品无人区一区二区三区在线 | 国产另类TS人妖一区二区| 国模吧一区二区三区精品视频| 午夜天堂一区人妻| 精品人妻少妇一区二区三区| 无码国产精品久久一区免费| 亚洲乱码日产一区三区| 日亚毛片免费乱码不卡一区 |