一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

React中的props

組件是React中重要特性之一。愛掏網(wǎng) - it200.com我們可以將一個(gè)復(fù)雜的UI分解成多個(gè)基本組件。愛掏網(wǎng) - it200.com在開發(fā)了基本組件之后,我們可以將所需的組件組合在一起創(chuàng)建一個(gè)復(fù)雜的UI(也稱為復(fù)雜的組件)。愛掏網(wǎng) - it200.comReact中使用propsstate控制組件中的數(shù)據(jù)流。愛掏網(wǎng) - it200.com但剛接觸React的同學(xué)對這些所謂的propsstate都會感到困惑,那么要掌握React就有必要掌握propsstate愛掏網(wǎng) - it200.com在接下來的內(nèi)容中我們主要圍繞著React的propsstate和大家一起討論。愛掏網(wǎng) - it200.com

時(shí)至今日,在Web開發(fā)中都在提Web組件。愛掏網(wǎng) - it200.com在React中也避免不了這個(gè)話題,換句話說,組件的概念也是React中的三大支柱之一。愛掏網(wǎng) - it200.com使用React開發(fā)應(yīng)用基本都是在使用組件(其實(shí)在Vue的開發(fā)也是類似,也是圍繞著組件進(jìn)行)。愛掏網(wǎng) - it200.com雖然我們在《React中創(chuàng)建組件的方式》和《初探React中函數(shù)組件和類組件的差異》和大家一起學(xué)習(xí)過React中創(chuàng)建組件的方式和不同方式之間的差異。愛掏網(wǎng) - it200.com但這些并不重要,重要的是我們想了解或者學(xué)習(xí)propsstate對組件的影響。愛掏網(wǎng) - it200.com

簡單地說,在React中怎么通過propsstate來改變組件愛掏網(wǎng) - it200.com

那么什么是組件呢?@Linton Ye在他的博文《Components, Props and State》中用一個(gè)房子形象的描述了組件是什么?

整幢房子好比一個(gè)UI組件,只不過這個(gè)組件的每個(gè)部分都可以拆分出來成為一個(gè)獨(dú)立的組件。愛掏網(wǎng) - it200.com正如上圖所示,房子House是一個(gè)大組件,其中房頂Roof、窗戶Window、門Door和墻Wall也是一個(gè)組件,并且這些組件組合在一起成為一個(gè)大的組件,即House組件。愛掏網(wǎng) - it200.com

如果我們換到一個(gè)Web頁面中來說的話,上面的房子就好比下圖:

也就是說,React組件被視為用戶界面構(gòu)建的模塊。愛掏網(wǎng) - it200.com這些組件都存在于相同的空間中,但彼此又是獨(dú)立執(zhí)行的。愛掏網(wǎng) - it200.comReact中的組件都有自己的結(jié)構(gòu)方法愛掏網(wǎng) - it200.com它們最大的特性就是可以重復(fù)使用愛掏網(wǎng) - it200.com為了更好的理解,可以將整個(gè)UI看到一棵樹,這棵樹常常被稱為UI樹愛掏網(wǎng) - it200.com比如上面的Web頁面,如果轉(zhuǎn)換成一棵UI樹的話,大致像下面這樣:

在這里,起始組件成為根(好比House,也類似HTML中的html),每個(gè)獨(dú)立的部分成為分支(好比RoofWindowDoorWall,也類似上圖中的1~5)。愛掏網(wǎng) - it200.com當(dāng)然,這些分支中也可以進(jìn)一步包含一些其他的分支。愛掏網(wǎng) - it200.com

而這些組件(UI)具有組織性,并且可以在根上根據(jù)狀態(tài)和數(shù)據(jù)做出相應(yīng)的更改,然后再流向子分支(子組件)。愛掏網(wǎng) - it200.com也可以簡單地說,組件可以直接從客戶端調(diào)用服務(wù)器,允許DOM在不刷新頁面的情況下動態(tài)更新愛掏網(wǎng) - it200.com也就是說,可以根據(jù)組件的propsstate對組件進(jìn)行動態(tài)更新(簡單地說,UI看上去不一樣)愛掏網(wǎng) - it200.com

同樣拿前面的House組件來說,其中Roof我們可以指定它是什么樣的顏色(根據(jù)自己的喜好將房頂刷成自己喜歡的顏色),當(dāng)然WallWindow以及Door也類似于Roof,但不同的是,門Door和窗戶Window除了可以根據(jù)自己喜歡定制之外,它們還有另外的狀態(tài),比如說門是關(guān)閉的還是打開的(窗戶也是相似的)。愛掏網(wǎng) - it200.com

如果將這些放到React中來描述的話,可以用propsstate來描述:

  • 不管是RoofWindowWallWindow還是Door都可以根據(jù)自己的喜歡定制自己的樣式風(fēng)格,而這些風(fēng)格對應(yīng)的就是React組件中的propsProperty的縮寫)。愛掏網(wǎng) - it200.com如果換到HTML中來的話,props就相當(dāng)于HTML標(biāo)簽元素的屬性(即attributes
  • 對于WindowDoor而言除了可以定制自己喜歡的風(fēng)格之外還有其他的狀態(tài),比如說他們是關(guān)閉狀態(tài)還是打開狀態(tài)。愛掏網(wǎng) - it200.com 相應(yīng)的,在React中,我們可以通過state來控制

要是用一句話來描述的話:

看上去是一句簡單的話,但對于React的初學(xué)者而言,propsstate是復(fù)雜的。愛掏網(wǎng) - it200.com既然他們是復(fù)雜的,我們就有必要一步一步的來分析和學(xué)習(xí)他們,只有這樣我們才能更好的掌握好React。愛掏網(wǎng) - it200.com

在React組件中,state是影響組件渲染的內(nèi)部數(shù)據(jù)集愛掏網(wǎng) - it200.com在一定程度上,state可以看作是React組件的私有數(shù)據(jù)或數(shù)據(jù)模型愛掏網(wǎng) - it200.comReact組件state可變的愛掏網(wǎng) - it200.com當(dāng)React組件的內(nèi)部state改變后,組件將根據(jù)新的狀態(tài)重新渲染自己。愛掏網(wǎng) - it200.com比如WindowDoor可以是關(guān)閉的也可以是打開的。愛掏網(wǎng) - it200.com

props是React組件的屬性,看起來像HTML屬性(Attributes)。愛掏網(wǎng) - it200.com在React組件中的props的值通常從父組件中傳遞。愛掏網(wǎng) - it200.com

propsproperties的簡寫,可以被定義為一種數(shù)據(jù)從組件傳遞到組件的方式,基本上就是從父組件傳遞到子組件愛掏網(wǎng) - it200.com將一個(gè)數(shù)據(jù)從一個(gè)React組件傳遞到另一個(gè)組件,主要是因?yàn)椴幌胱尳M件渲染靜態(tài)數(shù)據(jù),而是將動態(tài)數(shù)據(jù)傳遞給組件。愛掏網(wǎng) - it200.com這也正是React的props發(fā)揮其作用的地方。愛掏網(wǎng) - it200.com

同樣拿@Linton Ye創(chuàng)建的房子來說,你可能創(chuàng)建多幢房子,但又不希望這些房子是千篇一律的。愛掏網(wǎng) - it200.com你可能喜歡紅色的房頂,他可能喜歡藍(lán)色的房頂,還有人喜歡粉紅色的房頂。愛掏網(wǎng) - it200.com那么我們就可以通過給House組件透傳一個(gè)props的值來控制房頂Roof的顏色。愛掏網(wǎng) - it200.com比如下面這樣的一個(gè)示例:

詳細(xì)代碼請參考上面的示例,下面列出關(guān)鍵性代碼。愛掏網(wǎng) - it200.com根據(jù)不同用戶的喜好,創(chuàng)建的房子有可能房頂顏色會不一樣。愛掏網(wǎng) - it200.com也就是說顏色color是一個(gè)動態(tài)的。愛掏網(wǎng) - it200.com在這里我們可以通過給House組件透傳一個(gè)props屬性值讓用戶可以根據(jù)自己喜歡配置房頂顏色:

const Roof = ({color}) => {
    return 
}

const House = (props) => {
    return (
              
            

    )
}

const App = () => {
    return (
        
            >  
    )
}

你可能已經(jīng)看到了,blueredsalmon值傳給了color屬性(簡稱props),即這些值分別傳遞給組件。愛掏網(wǎng) - it200.com

甚至我們可以更激進(jìn)一些。愛掏網(wǎng) - it200.com比如我們希望房子除了房頂不一樣之外,還可以其他部件不一樣。愛掏網(wǎng) - it200.com簡單地說,組件的其他部位也可以像房頂一樣通過props來透傳。愛掏網(wǎng) - it200.com就上面的示例,我們可以像下面這樣來進(jìn)行改造:

// 創(chuàng)建房頂組件
const Roof = ({color, roofSrc}) => {
    return 
}

// 創(chuàng)建墻
const Wall = ({wallSrc}) => {
    return ;
}

// 創(chuàng)建窗戶
const Window = ({windowSrc}) => {
    return ;
}

// 創(chuàng)建門
const Door = ({doorSrc}) => {
    return ;
}

// 創(chuàng)建房子
const House = (props) => {
    return (
              
            

    )
}

const App = () => {
    return (
        
    )
}

你將看到的效果如下:

另外,在React中不能直接將屬性傳遞給目標(biāo)組件。愛掏網(wǎng) - it200.com這是因?yàn)镽eact遵循這樣的規(guī)則:

這意味著在發(fā)送屬性時(shí)不能跳過子組件層,子組件也不能將屬性發(fā)送回父組件。愛掏網(wǎng) - it200.com在實(shí)際使用的時(shí)候,還可以使用默認(rèn)的props值,以防父組件沒有向下傳遞props愛掏網(wǎng) - it200.com比如上面的示例,我們就可以給每個(gè)子組件設(shè)置一個(gè)默認(rèn)的props值:

const House = (props) => {
    // 聲明房子默認(rèn)需要的屬性值
    const IMAGES = {
        roof: '/uploads/allimg/191028/055319E22-3.png?1515785259159',
        wall: '/uploads/allimg/191028/05531a638-4.png?1501113882297',
        window: '/uploads/allimg/191028/0553193240-5.png?

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

返回頂部

主站蜘蛛池模板: 午夜精品一区二区三区免费视频 | 在线观看视频亚洲 | av特级毛片| 国产精品一区二区三区四区 | v片网站 | 91香蕉| 色站综合 | hdfreexxxx中国妞 | 91美女在线观看 | 天天干天天插 | 亚洲电影中文字幕 | 精品久久久久久久久亚洲 | 国产精品国产精品国产专区不卡 | 久久久91精品国产一区二区三区 | 国产午夜精品久久久久 | 日韩在线观看中文字幕 | 国产精品久久久亚洲 | www.国产精| 精品一区二区三区电影 | 免费一二区| 国产高清美女一级a毛片久久w | 欧美激情va永久在线播放 | 亚洲欧洲成人在线 | 色综合99| 成年人黄色一级片 | 亚洲综合色自拍一区 | 嫩草视频网站 | 91精品国产综合久久久久 | 亚洲a一区| 日韩在线欧美 | 成人免费视频在线观看 | 免费色网址 | 亚洲欧美中文日韩在线v日本 | 免费一级片 | 天堂网中文字幕在线观看 | 91精品国产色综合久久 | 美女爽到呻吟久久久久 | 中文字幕高清一区 | 亚洲精品一区二区冲田杏梨 | 欧美综合在线观看 | 日韩成人免费视频 |