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

React中的props

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在React組件中,state是影響組件渲染的內部數據集愛掏網 - it200.com在一定程度上,state可以看作是React組件的私有數據或數據模型愛掏網 - it200.comReact組件state可變的愛掏網 - it200.com當React組件的內部state改變后,組件將根據新的狀態重新渲染自己。愛掏網 - it200.com比如WindowDoor可以是關閉的也可以是打開的。愛掏網 - it200.com

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

propsproperties的簡寫,可以被定義為一種數據從組件傳遞到組件的方式,基本上就是從父組件傳遞到子組件愛掏網 - it200.com將一個數據從一個React組件傳遞到另一個組件,主要是因為不想讓組件渲染靜態數據,而是將動態數據傳遞給組件。愛掏網 - it200.com這也正是React的props發揮其作用的地方。愛掏網 - it200.com

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

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

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

const House = (props) => {
    return (
              
            

    )
}

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

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

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

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

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

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

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

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

    )
}

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

你將看到的效果如下:

另外,在React中不能直接將屬性傳遞給目標組件。愛掏網 - it200.com這是因為React遵循這樣的規則:

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

const House = (props) => {
    // 聲明房子默認需要的屬性值
    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?

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

返回頂部

主站蜘蛛池模板: 精品久久久久久久久久久久久 | 九九热国产精品视频 | 国产日韩欧美综合 | 亚州综合一区 | 蜜桃视频在线观看免费视频网站www | 成人特区| 一区二区三区四区电影 | 一久久久 | 黄色一级免费看 | 亚洲精品一区二区三区四区高清 | 天天摸天天干 | 天天综合久久网 | 国产欧美日韩综合精品一 | 国产一区 | 精品视频在线观看 | 国产午夜精品一区二区三区在线观看 | 精品1区2区3区 | 人人插人人 | 青草视频在线 | 香蕉婷婷 | 久久合久久 | 国产精品久久久久久久久久久新郎 | 中文字幕1区 | 国产亚洲精品一区二区三区 | 国产乱性 | 最新国产精品精品视频 | 91精品国产91久久久久久 | 久久综合久 | a级在线 | 人人九九 | 亚洲精选一区 | 欧美亚洲在线视频 | 国产精品免费播放 | av片免费 | 日韩成人在线播放 | 国产高潮av | 草草视频在线观看 | 日韩精品一区二区久久 | а天堂中文最新一区二区三区 | 亚洲国产一区二区三区在线观看 | 国产精品久久久久久婷婷天堂 |