4-5 為深色主題做準備 - 將 props 傳入 styled components 中
本單元為概念解說,並無對應的專案分支。
#
單元核心這個單元的主要目標包含:
- 了解如何將 props 帶入 emotion 的 styled components 中使用
- 了解把 props 帶入 styled components 中可以做的應用
自從手機裝置出現「深色模式」後,不論是 Instagram、Google Play 或 iOS,更新後都開始能套用深色主題了,後來非常多的網站現在也開始支援深色主題的功能,避免許多夜貓子使用者在睡前如果想要瀏覽頁面時被白屏閃瞎的情況。
為了實作深色主題,在這個單元中,主要會要說明更多 Emotion 的用法,在對這些用法有基本的理解後,將於下一個單元開始實作深色主題。
#
Emotion: 透過 props 將資料帶入 Styled Components 內我們已經知道,在 React 中父子層元件間的資料,可以透過 props 來進行傳遞。現在當我們使用 emotion 來產生帶有樣式的元件時,因為它就是 React 元件,因此也可以使用 props 的方式把資料帶進去 styled components 中。
舉例來說,Location 元件是透過 emotion 所建立的 styled components,既然是 React 元件,一樣可以用 props 的方式把資料傳進去。這裡我們可以將 theme
當成一個 props 串進去 Location 這個 styled components 中:
接著在使用 Emotion 定義 Location
這個 Styled Component 的地方,就可以透過 props
取得傳入的資料:
#
搭配 props 和 css 方法達到實作深色主題的邏輯這個做有什麼用呢?還記得我們提過把 CSS 寫在 JS 會有一些好處,現在當我們可以取得外部傳進來的資料時,就可以根據這個資料來決定要呈現的 CSS 樣式,例如,當 theme
為 dark
時就把文字顏色改成 #DADADA
,否則顯示 #212121
,就可以寫成這樣:
透過這樣的方式,只需要修改 theme
這個 props 傳入的值,就可以快速地切換許多元件的 CSS 樣式,以這裡來說,只要 Location 元件帶入的 props 不同時,該元件就會呈現出不同的顏色:
這的單元並沒有對應的程式碼,主要說明了如何將 props 傳入 styled components 中的方式,還有如何透過這種方式來實作亮/暗色主題切換的邏輯。在下一個單元中,就會進一步根據這樣的方式來實作亮/暗色主題的切換。