React
開關切換組件這是一篇譯文:css
HTML
的複選框來開發一個
React
開關組件,在這個過程你將會學到許多
React
複選框相關的知識。
下面是IOS
向世界推出的UI
組件,人們把它稱之爲Switch
或者Toggle
。 react
在IOS
推出Switch
以前,網頁中的布爾輸入只有複選框。複選框固然依舊能夠在今天繼續使用,可是switch
根據現實生活中真實的開關改進了複選框。git
switch
給人真實的感受。相比於點擊複選框,switch
的點擊效果就像你在真實的使用一個開關同樣。github
所以,在這篇教程中,咱們將會基於原生的HTML
複選輸入框來開發一個新的React
Switch
組件。此外,咱們也會添加一些CSS
樣式,來讓簡單、古老的複選框變成一個時髦漂亮的Switch
。編程
Switch
的HTML
結構每當我建立一個新的React
組件的時候,我會先創建一個初步使人滿意的HTML
和CSS
結構,而後再去編寫JavaScript
代碼。瀏覽器
建立一個Switch.js
的新文件,爲它添加以下代碼:
編輯器
你這時候若是在編輯器中完成了這段代碼,因爲咱們使用了原生複選框來做爲React Switch
組件的基礎,你將會看到一個簡單的複選框。模塊化
提示:
這裏咱們沒有必要再從新發明一個輪子。畢竟,開關是展現布爾值的另外一種方式,而複選框本來就是用來處理布爾值的輸入框。函數
CSS
來美化組件在組件文件的同一目錄下創建Switch.css
文件,加入下面的CSS
代碼,大概看一下每一個類的用途。我不打算在這篇教程中去探索CSS
,文章的重點是JavaScript
和React
。 學習
Switch
組件要在React
中使用Switch
組件,咱們還須要最後一步:在其它組件中import
Switch
組件而且在組件中聲明:
保存文件後,能夠看到在瀏覽器中咱們已經將一個簡單的複選框轉換成了一個看上去至關漂亮的Switch
輸入框:
props
來接收事件和屬性儘管咱們的Switch
組件可能看起來很實用,但其實Switch
組件並無正真的改變它的value
值。
這是由於咱們的組件缺乏了倆個重要的屬性:
checked
onChange
checked
屬性存儲了input
的當前value
值。在咱們的組件中,他多是true
或false
。
每當咱們切換Switch
組件時都會觸發onChange
事件,咱們將會經過onChange
來改變Switch
組件的value
值。
在編寫代碼以前,咱們須要瞭解一下無狀態組件和有狀態組件。一個無狀態組件也叫作啞吧組件,它不能控制它本身的狀態,所以,須要另一個組件來記錄當前組件的狀態。
咱們的Switch
組件將會是一個無狀態組件,它須要父組件經過props
來爲它傳遞屬性。
打開Switch.js
而且進行以下修改:
代碼相比於以前有2個新增內容:
checked
: 經過父組件傳入的checked
來控制是否選中onChange
: 經過父組件傳入的onChange
來更改組件的checked
屬性最後,打開父組件(我使用的是App.tsx
)而且修改組件的使用方式:
注意,如今父組件的狀態來自於useState hooks
。這意味着這個組件將要向下把傳遞狀態給咱們的Switch
組件的checked
屬性。
咱們也在onChange
函數中向下傳遞了設置函數setChecked
。這樣,在Switch
組件進行切換改變value
值的時候,他將會調用父組件傳下來的onChange
函數
若是你完成了上邊的代碼,會發現Switch
組件在切換狀態的時候視覺UI
上並無什麼不一樣。
因爲咱們可以使用Switch
組件中經過父組件props
傳遞下來的checked
屬性,因此咱們只須要對代碼作一個很簡單的改動就能夠改變Switch
組件的背景色。
修改Switch.tsx
組件中的label
元素,代碼以下:
保存組件,切換到你的瀏覽器頁面你會看到一個完整工做的Switch
組件。當Switch
組件激活的時候會變成綠色,而當它關閉的時候會變爲灰色。
到這裏,咱們已經擁有了一個完整功能的React
Switch
組件,它能夠切換、更改value
值而且會在激活的時候變爲綠色。
若是你想要知道如何可以指定激活顏色來擴展咱們的Switch
組件,那麼請繼續往下閱讀。
開發一個靈活的React
組件而且可以讓它應用於多種不一樣的場景是一個特別好的編程實踐。例如,咱們可能將會在下面的狀況使用Switch
組件:
這些只是3個簡單的例子,網頁中還有數不盡的Switch
組件的應用場景。
如今有一個問題,咱們的Switch
組件在激活的時候只能顯示綠色。假設咱們在模態框中刪除用戶帳戶時想要讓激活顏色變成紅色來更好的提醒用用戶該怎麼辦呢?
讓咱們爲Switch
組件添加另一個屬性checkedColor
來進行控制激活額顏色:
checkedColor
是一個16進制的字符串。保存代碼後,跳轉到父組件併爲聲明的Switch
組件添加一個新的checkedColor
屬性:
如今咱們已經獲得了一個靈活的、模塊化的Switch
組件。