React基礎(一):6個簡單 demo 輕鬆學會 React 開發模式(四)

聲明: React基礎(一)的內容來自騰訊課堂 Web前端【紅點工場】的視頻,原作者是 Skipper 老師。

 

接下來的 Demo 6,我們會考慮一個新的東西:進行一個組件化的包裝。

就是把按鈕當做一個組件,然後在我們需要使用的時候,不斷的複用就可以了,並且也是純粹的 JS。

 

Demo 6:

那麼在寫這個 Demo 之前,我們先思考一下,

我們之前,無論是寫表單,還是按鈕,它們都會有一些共同點,

比如它們都會有:state,setState 方法,render 方法,

還會有一個控制的方法,比如 handleClick 方法。

那麼既然它們每一個都有這些東西,我們是不是能把它們提取成一個對象呢?

接下來,我們就來試一下:

我們可以看到,剛開始頁面是空白的,

當我們在控制檯上 new Button() 的時候,

首先,它會構建一個 state --> this.state = { ... },

然後它會根據 state 來渲染這個頁面 --> this.render(),

最終就會把整個模版字符串,填充到 id = "root" 的這個標籤裏面去,

這時候,我們就有了一個點贊按鈕了,並且是根據它自己的 state 來渲染。

 

那麼,這麼寫的好處是什麼呢?

先別急,我們再寫一個 title 的組件:

那麼完成 title 組件之後,我們發現,兩個組件之間會有一個衝突問題:

因爲 root 標籤只有一個,所以組件也只能有一個,要麼是 button,要麼是 title。

那麼我們是不是應該思考一下,我們設定組件的目的是什麼?

是不是,我們只要實例化,new 一個,就生成一個組件,

如果想複用,new 多少次,就有多少個組件,

那麼我們就不能直接賦值給 root.innerHTML 了,

我們可以換一種模式,當我們調用 render() 函數的時候,直接 return 一個字符串出來。

那麼,我們可以先去掉 constructor 和 setState 裏面的 this.render() 方法調用:

那麼爲什麼要這麼做呢,它的好處又是什麼呢?

別急,我們繼續往下看,

首先我們構造一個容器 Wrap,那麼每次我們都可以在 Wrap 裏面不斷的去複用我們定義的組件:

可以看到,現在我們是不是可以不斷的複用某個類了。

我們把一個組件寫好之後,只要在別的組件裏面引用它,就可以不斷的去構建新的組件,

用小組件,組合成大組件,再用大組件,組合成更大的組件,最終,構成一整個網頁。

我們的組件可以反覆的用在別的地方,這個就是組件式開發的思想。

 

那麼,我們是否發現一個問題:

我們的每一個組件,都需要寫一個 setState 方法?

那麼我們可以是不是可以把這個方法提取出來,放到父類 Component 裏面,以供它們繼承使用呢?

那麼我們的每一個組件,以後就都可以不用寫 setState 方法了,

我們只需要 extends Component 就可以了:

可以看到,頁面同樣渲染出來了,

並且在右邊的控制檯上,button.setState 是有值的,並且它是一個方法,

下面也可以清楚的看到,setState 這個方法,它是繼承自 Component 的。

 

其實在 React 裏面,就有給我們提供一個類,就叫做 Component,

我們在寫任何組件的時候,都需要用 extends 去繼承它,才能夠使用。

那麼,我們明白了:

Component 提供了一個基礎,把一些,每個組件都要用的東西,都放在這裏,

那麼你要寫一個新組件的時候,只需要去 extends 繼承一下,

再去實現你想要的功能就可以了。

 

到此,我們是不是已經瞭解了 React 的一些基本模式呢?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章