1. 程式人生 > >react入門筆記五 (元件傳值----------父傳子->props)

react入門筆記五 (元件傳值----------父傳子->props)

經過上面的學習,我們已經會了元件化的開發;

但是第四篇的專案有個致命的缺陷;

就是它的網站名,與a標籤的連結地址是靜態資料,是定死的,這也就是我們說的硬程式碼;

這樣的話,那我們在呼叫這個自定義元件的時候,所有的元件都是一樣的,這樣就沒有任何意義了;

所以現在讓我們開始讓元件內的資料動起來,而不是我們自己寫的靜態資料;

上程式碼!

0.props

首先我們要認識到這樣的幾個問題;

資料的來源:react的資料是這樣的,它像一個瀑布一樣,它的資料從一個父元件向它的子元件的方向流下,而且父元件傳下去的資料子元件只有自讀許可權,不能修改父元件傳遞的資料,

資料的傳遞方式:

props,props可以將父元件的資料傳遞給子元件

所以當我們使用父元件的資料時,我們可以直接this.props.XXX就可以使用父元件傳遞下來的XXX資料了

但是props有一個例外

1.讓我們修改存放網站名的元件

將原來的

改為

2.讓我們修改存放網站的元件

將原來的

改為

3.讓我們修改存放上述兩個子元件的大元件

現在兩個子元件已經將資料從死資料改為父元件傳遞下來的資料了;

所以現在我們來改裝這個父元件,給子元件傳遞資料

 

將原來的

改為

因為父元件也不是資料的來源,所以我們先得到父元件的父元件的資料,也就是爺爺輩的元件傳遞下來的資料,this.props

然後我們將this.props.wname與this.props.wlink分別傳遞給下面的兩個子元件

4.讓我們修改渲染的函式

將原來的

改為

這時候因為渲染函式是資料來源了,就直接像寫js的屬性一樣,直接把網站名與網站連結地址傳遞給Webshow元件

5.執行效果

 

6.this.props.children

剛才我們學習瞭如何使用this.props傳遞普通資料,現在我們有個特殊的需求,

現在又一個ul列表,但是下面的子節點的個數不確定,這時候我們就要用到this.props.children

this.props.children與普通的this.props.XXX不同在於,

this.props.children傳遞的是子節點,

this.props.傳遞的是普通資料

現在讓我們看下這個this.props.children是如何實現上述的需求的

首先先定義一個自定義的元件

然後編寫渲染函式

實現效果

7.屬性值的驗證

8.設定屬性的預設值