서버컴포넌트에서 토글기능으로 다크모드 기능 추가하기 (스테픈 2km)

image.png

오늘의 작업일지

image.png

일단 vscode 스럽게 디자인을 좀 배치중이다

light모드에서는 이런식으로 동작하고

다크모드에서는

image.png

이런느낌으로 변경되도록 했다.

우측에 X버튼을 클릭하면

VScode를 종료시키는 느낌으로 기존 디자인으로 변경된다.

image.png

일단은 이런 형태로 구상했다.

아니면 x버튼을 누르면 앱 선택창으로 넘어가는 느낌으로 구현할까도 고민중인데

일단은 vsc 느낌으로 제작하려는 방식이 마음에 들어서 이대로 진행해보려고 한다.

image.png

react와는 다르게 next에서는 서버사이드에서 redux를 그대로 사용하기 힘들고

일부 훅을 서버사이드에서는 사용할 수 없다.

그래서 페이지를 구성할때 어떤 부분을 서버로 돌릴건지를 고민해야하는데

일단은 훅을 사용하는 경우 전부 클라이언트 컴포넌트로 만들었다.

몇몇 변경이 없는 버튼은 서버 사이드 컴포넌트로 바꾸는게 효율적일것 같은데

이 부분을 어떻게 하면 쉽고 간단하게 할 수 있을지 고민된다.

image.png
몇가지 고민점은

외부 api를 사용해 데이터를 받아오는경우

데이터를 받아오는데 시간이 걸려서

페이지 로딩이 많이걸리는데

이 부분을 개선하기 위해 무슨방법을 사용할지 고민을 해봐야겠습니다.

그리고 다크모드와 라이트 모드 구현은

body에 data-theme을 줘서

이걸 css의 선택자를 활용해서 변경처리를 하고있는데

body에 data-theme을 toggle버튼을 클릭시 변경되도록 구상했다.

image.png

토글버튼은 이 부분인데

이 방식이 맞는 방식인지는 모르겠고

일단 해당 버튼을 클릭하면

store에 값이 변경된다.

image.png

이 함수를 dispatch 해서 스토어에 값을 저장하고

store에 값이 변경되는걸 감시하는 컴포넌트를 하나 만들었다.

image.png

스토어의 값이 바뀌면 body에 data-theme의 값을 변경시켜주는 역할을 하고

해당 컴포넌트를 provider로 연결되어있는 컴포넌트에 넣어줬다.

image.png

어차피 리턴값이 없기때문에

하는 기능은 그냥 변경사항이 있으면 body의 테마를 변경한다.

다른 좋은방법이 있을지 모르겠고

그냥 고민하다가 이렇게 처리했다..

서버 컴포넌트에서 클라이언트에서 사용하던 훅들을 사용을 할 수 없어서

어쩔수 없이 이런방식을 썼다.


스테픈 2km완료

image.png

Coin Marketplace

STEEM 0.23
TRX 0.12
JST 0.029
BTC 66228.07
ETH 3559.90
USDT 1.00
SBD 3.01