React.js小書:組件的 render 方法

    React.js 中一切皆組件,用 React.js 寫的其實就是 React.js 組件。愛掏網(wǎng) - it200.com我們在編寫 React.js 組件的時候,一般都需要繼承 React.js 的 Component(還有別的編寫組件的方式我們后續(xù)會提到)。愛掏網(wǎng) - it200.com一個組件類必須要實現(xiàn)一個 render 方法,這個 render 方法必須要返回一個 JSX 元素。愛掏網(wǎng) - it200.com但這里要注意的是,必須要用一個外層的 JSX 元素把所有內(nèi)容包裹起來。愛掏網(wǎng) - it200.com返回并列多個 JSX 元素是不合法的,下面是錯誤的做法:

    class FirstComponent extends React.Component {
        render() {
            return (
                第一個
                第二個
            )
        }
    }
    
    ReactDOM.render(, document.getElementById('app'))
    

    必須要用一個外層元素把內(nèi)容進行包裹:

    class FirstComponent extends React.Component {
        render() {
            return (
                
                    第一個
                    第二個
                
            )
        }
    }
    
    ReactDOM.render(, document.getElementById('app'))
    

    在 JSX 當中你可以插入 JavaScript 的表達式,表達式返回的結(jié)果會相應地渲染到頁面上。愛掏網(wǎng) - it200.com表達式用 {} 包裹。愛掏網(wǎng) - it200.com例如:

    class FirstComponent extends React.Component {
        render() {
            const word = 'is good!'
    
            return (
                
                    

    React 小書 { word }

    ) } } ReactDOM.render(, document.getElementById('app'))

    頁面上就顯示React 小書 is good愛掏網(wǎng) - it200.com你也可以把它改成 {1 + 2},它就會顯示 React 小書 3愛掏網(wǎng) - it200.com你也可以把它寫成一個函數(shù)表達式返回:

    ...
    
    render () {
        return (
            
                

    React 小書 {(function () { return 'is good'})()}

    ) } ...

    簡而言之,{} 內(nèi)可以放任何 JavaScript 的代碼,包括變量、表達式計算、函數(shù)執(zhí)行等等。愛掏網(wǎng) - it200.com render 會把這些代碼返回的內(nèi)容如實地渲染到頁面上,非常的靈活。愛掏網(wǎng) - it200.com

    表達式插入不僅僅可以用在標簽內(nèi)部,也可以用在標簽的屬性上,例如:

    ...
    
    render () {
        const className = 'header'
        return (
            
                

    React 小書

    ) } ...

    React組件渲染出來的DOM結(jié)構(gòu):

    這樣就可以為 div 標簽添加一個叫 header 的類名。愛掏網(wǎng) - it200.com

    注意,直接使用 class 在 React.js 的元素上添加類名如 這種方式是不合法的。愛掏網(wǎng) - it200.com因為 class 是 JavaScript 的關鍵字,所以 React.js 中定義了一種新的方式:className 來幫助我們給元素添加類名。愛掏網(wǎng) - it200.com

    還有一個特例就是 for 屬性,例如 ,因為 for 也是 JavaScript 的關鍵字,所以在 JSX 用 htmlFor 替代,即 愛掏網(wǎng) - it200.com而其他的 HTML 屬性例如 styledata-* 等就可以像普通的 HTML 屬性那樣直接添加上去。愛掏網(wǎng) - it200.com

    {} 上面說了,JSX 可以放置任何表達式內(nèi)容。愛掏網(wǎng) - it200.com所以也可以放 JSX,實際上,我們可以在 render 函數(shù)內(nèi)部根據(jù)不同條件返回不同的 JSX。愛掏網(wǎng) - it200.com例如:

    class FirstComponent extends React.Component {
        render() {
            const isGoodWord = true
            return (
                
                    

    React 小書 { isGoodWord ? is good : is not good}

    ) } } ReactDOM.render(, document.getElementById('app'))

    上面的代碼中定義了一個 isGoodWord 變量為 true,下面有個用 {} 包含的表達式,根據(jù) isGoodWord 的不同返回不同的 JSX 內(nèi)容。愛掏網(wǎng) - it200.com現(xiàn)在頁面上是顯示 React 小書 is good愛掏網(wǎng) - it200.com如果你把 isGoodWord 改成 false 然后再看頁面上就會顯示 React 小書 is not good愛掏網(wǎng) - it200.com

    如果你在表達式插入里面返回 null ,那么 React.js 會什么都不顯示,相當于忽略了該表達式插入。愛掏網(wǎng) - it200.com結(jié)合條件返回的話,我們就做到顯示或者隱藏某些元素:

    ...
    
    render () {
        const isGoodWord = true
        return (
            
                

    React 小書 {isGoodWord ? is good : null }

    ) } ...

    這樣就相當于在 isGoodWordtrue 的時候顯示 is good,否則就隱藏。愛掏網(wǎng) - it200.com

    條件返回 JSX 的方式在 React.js 中很常見,組件的呈現(xiàn)方式隨著數(shù)據(jù)的變化而不一樣,你可以利用 JSX 這種靈活的方式隨時組合構(gòu)建不同的頁面結(jié)構(gòu)。愛掏網(wǎng) - it200.com

    如果這里有些同學覺得比較難理解的話,可以回想一下,其實 JSX 就是 JavaScript 里面的對象,轉(zhuǎn)換一下角度,把上面的內(nèi)容翻譯成 JavaScript 對象的形式,上面的代碼就很好理解了。愛掏網(wǎng) - it200.com

    同樣的,如果你能理解 JSX 元素就是 JavaScript 對象。愛掏網(wǎng) - it200.com那么你就可以聯(lián)想到,JSX 元素其實可以像 JavaScript 對象那樣自由地賦值給變量,或者作為函數(shù)參數(shù)傳遞、或者作為函數(shù)的返回值。愛掏網(wǎng) - it200.com

    class FirstComponent extends React.Component {
        render() {
            const isGoodWord = true
            const goodWord =  is good
            const badWord =  is not good
    
            return (
                
                    

    React 小書 { isGoodWord ? goodWord : badWord }

    ) } } ReactDOM.render(, document.getElementById('app'))

    這里給把兩個 JSX 元素賦值給了 goodWordbadWord 兩個變量,然后把它們作為表達式插入的條件返回值。愛掏網(wǎng) - it200.com達到效果和上面的例子一樣,隨機返回不同的頁面效果呈現(xiàn)。愛掏網(wǎng) - it200.com

    再舉一個例子:

    class FirstComponent extends React.Component {
    
        renderGoodWord (goodWord, badWord) {
            const isGoodWord = true
            return isGoodWord ? goodWord : badWord
        }
        render() {
            return (
                
                    

    React 小書 { this.renderGoodWord( is good, is not good)}

    ) } } ReactDOM.render(, document.getElementById('app'))

    這里我們定義了一個 renderGoodWord 函數(shù),這個函數(shù)接受兩個 JSX 元素作為參數(shù),并且隨機返回其中一個。愛掏網(wǎng) - it200.comrender 方法中,我們把上面例子的兩個 JSX 元素傳入 renderGoodWord 當中,通過表達式插入把該函數(shù)返回的 JSX 元素插入到頁面上。愛掏網(wǎng) - it200.com

    • 用 React.js 構(gòu)建未讀消息組件
    • JSX元素變量

    胡子大哈

    React.js 資深用戶,熱愛分享、熱衷開源,哦,還有臺球,曾就職于百度。愛掏網(wǎng) - it200.com著有《 React.js 小書》,以及前端在線評測系統(tǒng)ScriptOJ 。愛掏網(wǎng) - it200.com

    分享到:
    • 上一篇:React.js小書:使用 JSX 描述 UI 信息
    • 下一篇:從零學習React技術(shù)棧:組件類型

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

    返回頂部

    主站蜘蛛池模板: 日本一区二区三区中文字幕| 日本免费一区二区三区四区五六区| 久久精品一区二区东京热| 麻豆aⅴ精品无码一区二区| 国产日韩精品一区二区三区| 一区二区三区四区免费视频| 一区二区在线视频观看| 日韩在线一区二区| 综合久久一区二区三区 | 国产一区二区三区免费观看在线| 伊人色综合网一区二区三区 | 国产亚洲情侣一区二区无码AV| 亚洲无码一区二区三区| 久久久91精品国产一区二区三区| 亚洲av高清在线观看一区二区| 成人免费一区二区无码视频| 精品无码一区二区三区电影 | 国产在线精品一区免费香蕉| 国产精品亚洲一区二区无码| 中文字幕av人妻少妇一区二区 | 亚洲av无码一区二区三区四区| 亚洲av无码一区二区三区不卡| 中文字幕不卡一区| 一区国严二区亚洲三区| 国产伦一区二区三区免费| 国产精品第一区揄拍| 亚洲熟妇av一区| 日韩av无码一区二区三区| 亚洲乱码日产一区三区| 精品久久久久一区二区三区| 欲色影视天天一区二区三区色香欲 | 精品国产一区二区麻豆| 人妻互换精品一区二区| 精品无码国产一区二区三区51安 | 亚洲综合无码AV一区二区| 国产另类ts人妖一区二区三区| 一区二区三区日本电影| 久久99久久无码毛片一区二区| 一区二区三区四区视频在线| 国产伦精品一区二区三区视频猫咪 | 中文字幕无码不卡一区二区三区|