今天主要替記帳 App 加入 Dark Mode 暗黑模式,讓使用者可以選擇自己想要的主題。
加入全域暗黑模式
我在 Header 加入暗黑模式切換按鈕,並用 isDarkMode 記錄目前的主題狀態。
接著Props會把 isDarkMode 傳給 Header、ExpenseList、TotalCard 等元件,讓不同區塊可以根據目前模式改變樣式。
我也複習了 React 的單向資料流,了解 Dark Mode 的狀態可以由父元件統一管理,再透過 Props 往下傳給需要使用的子元件,而不是每個元件都各自建立一份狀態。
讓 Canvas 圖表也跟著切換
這裡圖表比較特別的是,Canvas 畫出來的圖表不像一般 HTML 元件可以直接改 CSS。
所以我在 isDarkMode 改變時,讓 Canvas 重新繪製,根據目前的模式更新文字與圖表顏色。
例如重新繪製前會先清空畫布:
再使用新的顏色重新繪製。
重點:Canvas 的內容是畫上去的,不是一般可以直接修改 CSS 的 DOM 元素。
切換月份時清除選取狀態
除了 Dark Mode,我也順便修正之前批次操作留下的 UX 問題。
如果使用者在某個月份勾選了資料,再切換到另一個月份,原本的 selectedIds 可能還保留著上一個月份的資料。
因此加入:
當 currentMonth 改變時,就會自動清空選取狀態,避免使用者切換月份後誤刪其他月份的資料。
在這邊呈現一下成果:
白天模式:
暗黑模式:
總結:
今天完成了...