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),每個獨立的部分成為分支(好比Roof、WindowDoorWall,也類似上圖中的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來描述:

    • 不管是Roof、Window、Wall、Window還是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 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 国产福利电影一区二区三区,亚洲国模精品一区| 成人精品一区二区不卡视频| 国产一区二区三区在线视頻| 2022年亚洲午夜一区二区福利| 亚洲福利视频一区二区| 亚洲色偷偷偷网站色偷一区| 丰满少妇内射一区| 无码毛片一区二区三区中文字幕| 日本一区二区三区免费高清| 中文字幕亚洲综合精品一区| 熟女精品视频一区二区三区| 久久综合一区二区无码| 精品人体无码一区二区三区| 国产精品视频免费一区二区三区| 久久精品无码一区二区三区免费 | 精品国产一区二区三区久久影院 | 精品成人av一区二区三区| 日本一区中文字幕日本一二三区视频 | 国内精品一区二区三区最新| 无码人妻精品一区二区三区久久| 久久se精品一区精品二区国产 | 一本岛一区在线观看不卡| 八戒久久精品一区二区三区| 色多多免费视频观看区一区| 国产伦精品一区二区三区免费迷| 日本一区二区三区在线观看视频| 竹菊影视欧美日韩一区二区三区四区五区 | 国产成人久久一区二区三区| 日韩视频免费一区二区三区| 国产伦精品一区二区三区四区 | 国产精品无码一区二区在线 | 精品一区二区三区免费观看| 人妻少妇一区二区三区| 无码精品人妻一区二区三区人妻斩 | 亚洲一区二区无码偷拍| 国产一区二区三区免费在线观看| 精品一区二区久久久久久久网精| 综合激情区视频一区视频二区| 动漫精品专区一区二区三区不卡| 中文字幕一区二区日产乱码| 在线播放国产一区二区三区 |