從零學習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色香蕉一区二区三区蜜桃| 一区二区三区视频| 国产一区二区三区在线观看免费 | 国产经典一区二区三区蜜芽| 国产激情无码一区二区三区| 国产SUV精品一区二区四| 精品成人乱色一区二区| 国产精品无码一区二区三级| 久久无码人妻精品一区二区三区| 国产欧美一区二区精品仙草咪| 无码AV中文一区二区三区| 久久婷婷久久一区二区三区| 国产无码一区二区在线| 午夜福利国产一区二区| 国产一区二区精品久久岳√| 亚洲一本一道一区二区三区| 精品欧洲av无码一区二区| 中文字幕日韩一区| 一区二区三区四区精品视频 | 国产日韩一区二区三区在线观看| 日韩精品无码Av一区二区| 美女视频黄a视频全免费网站一区| 日韩美女在线观看一区| 精品国产一区二区三区久久影院 | 精品乱人伦一区二区三区| 91福利国产在线观看一区二区 | 色偷偷久久一区二区三区| 久久久无码一区二区三区| 亚洲一区二区免费视频| 91久久精品无码一区二区毛片| 亚洲一区二区影视| 日本无卡码免费一区二区三区| 日本免费一区二区三区最新 | 久久人妻无码一区二区 | 欧洲精品无码一区二区三区在线播放| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品女同一区二区| 日韩好片一区二区在线看| 在线成人一区二区| 日亚毛片免费乱码不卡一区|