오늘 마지막 React 수업이 끝났다. 뭔가 홀가분하면서도 아쉬운마음이 드는걸 보면 한달이라는 시간동안 React가 나에게 뭔가 더 깊에 들어온 느낌이 들었다. 아직 2달넘게 블체스가 남았는데도 뭔가 끝나가는 느낌이 드는걸 보면 아직 정신을 못차렸나보다 ㅎㅎ
오늘은 개인 NFT Page를 만드는 프로젝트를 마무리했다.
그제께 오후부터 오늘 오후까지 정말 그동안 배웠던 부분들을 다 적용해보며 은찬매니저님의 큰도움을 받아 그래도 개인적으로는 만족스럽게 마무리할 수 있었다.
그래서 오늘은 내가 했던 프로젝트의 복기 겸 마무리를 하는 시간을 가져볼까 한다. 그리고 내가 구현해낸 부분과 문제가 있었던 부분들, 어떻게 해결했는지에 대해서도 기록을 남겨보도록 하겠다.
- 먼저 위 이미지와 같이 series NFT와 special NFT로 카테고리를 따로 만들기 위해서
필수 요소로 필요한 코드들을 새로 만들기 시작함.
App.jsx, main.jsx, nfts.jsx에서 필요한 코드들을 똑같이 만들어주었고, datail, nftCard는 기존의 코드와 분리를 해야하기 때문에 따로 components를 만들어주었다.
단순히 코드만 복붙하는것이 문제가 아니라 그 안에서도 오류가 굉장히 많이 발생하였고, 오류를 하나씩 해결해 나가면 코드를 짜나갔다.
- 카테고리를 만들어 다른 이미지를 넣기 위해서는 json주소와 image주소도 달라야했고, 스마트컨트렉트 주소와 ABI도 달라야해서 그것도 다 만들어 주었다.
- 환률이 실시간으로 업데이트 되도록 setInterval을 사용해 4초에 한번씩 업데이트 되도록 만듬.
- 새로고침 할때마다 새로운 이미지가 뜨도록 코드가 짜여져 있었으나 기존에 강사님 이미지가 아닌 내가 만든 이미지를 넣고나니 이미지가 뜨지 않는 문제가 생김.
- 메인페이지에서 series NFT와 special NFT가 같은 이미지가 생성이 되었는데 special NFT가 이미지가 불려오지 않는 문제였던것을 확인했음.
- Intro 부분에 있는 이미지에 setInterval을 똑같이 이용해 순차적으로 이미지가 변경되도록 만들었음.
다만, 위에있던 환율과 마찬가지로 접근을 하였으나 오류가 생겼고, 오류를 해결하면서 문제의 원인을 파악할 수 있었음.
먼저 ranNum 함수를 useState로 만들어주고, useEffect에 기존에 만들어져있던 랜덤함수를 넣어주었음. 이렇게 작업했는데도 오류가 있어서 무엇이 문제일까 고민해봤음.
알고보니 useEffect에서 랜덤함수를 불러오고 있는데 위에 imgSrc와 충돌이 생겨서 작동을 하지 않는다고 생각하게 되었음.
그래서 imgSrc를 useEffect 아래로 이동시켜주었더니 오류가 해결됨.
- series NFT는 해당 이미지에 맞게 detail 이미지까지 잘 가져왔지만 special NFT는 detail 이미지를 series NFT의 것으로 가지고 옴.
이 문제를 해결하기 위해 은찬매니저님과 새벽1시까지 머리를 싸매고 찾아보다가 결국 아주 허무하게 해결하게 되었음(그렇지만 굉장히 뿌듯했음.)
detail 이미지에 영향을 주는 코드들을 확인해보니 다 뒤에 숫자2가 붙어있는것을 확인할 수 있었음. 아무래도 새로운 카테고리 하나는 더 만들다보니 처음에 간단하게 2를 붙여 만드는게 편해서 그렇게 했음.
하지만 간과했던점이 이 부분을 이상하게 생각하지않고 그대로 진행했던게 detail 이미지를 못가져오는 이유가 되었음.
아직도 왜인지는 이해를 못하겠지만 일단 다른 부분들은 숫자2를 뒤에 붙이거나 다른 이름으로 만들어 확실히 다른카테고리임을 구분해줘야했음. 하지만 useState나 useParams같은 경우 같은 함수를 사용해도 아무런 문제가 되지 않는것을 확인할 수 있었음.
그리고 가장 중요한 부분은 detail 이미지를 props로 가져오는 부분에 변경해야하는 부분이 있었는데 바로 그냥 "/"가 아닌 "/a/"처럼 만들어주는것이었음. 뒤에 무언가를 붙이는게 아닌 앞에 만들어 주는게 포인트였음.
아직도 위 뒤에 붙이면 안되는지에 대해서는 확실한 이유를 찾지못함. 어쨌든 문제를 해결해서 special NFT detail 이미지도 잘 가지고 오게 해결했음.
- detail 페이지에 새로운 기능을 만들기 위해 제안하기, 구매하기 버튼을 만들었음.
💡 이런 혼종이 만들어짐. (차크라UI와 테일윈드는 같이 사용이 가능!)
1) 제안하기, 구매하기 버튼 만듬
2) 제안현황 만듬.
3) Modal.jsx를 만들어 Modal을 이용해 그 안에 input값을 넣은 공간을 만들고 입력창을 만듬.
4) 제안현황에 입력이 되도록 연결을 하고 내용이 지워지는게 아닌 계속 쌓이도록 구현.
5) Modal에서 엔터를 누르면 입력이 되고, 입력을 하면 Modal창이 꺼지도록 구현.
5-1) form태그로 input과 button을 감싸고, onsubmit을 만들고 그 안에 onClickSuggestion을 넣어줌.
5-2) onChage를 만들고 안에 e.target.value를 작성해줌.
5-3) 마지막으로 아래 value를 만들고 중괄호 안에 name을 넣어줌.
6) 상위에 있는 onClickSuggestion에 있는 소괄호에 이벤트 (e)를 넣어주고 아래 e.preventDefault를 작성해줌.
7) 마지막으로 입력후 창이 닫히게 하기 위해 차크라UI 코드인 onClose();를 써줌.
위에 작성한 내용 말고도 변경하거나 디테일하게 구현한 내용이 많지만 크게 기억나는 부분들만 정리하여보았다. 이번에 개인 프로젝트를 해보며 배운것도 많고 특히 은찬매니저님이 알려주신 부분들이 많아서 정말 많은 도움이 되었다. 그리고 강사님도 자신이 도와줄 수 있는 부분에 항상 최선을 다해 도와주시는것 같아 항상 감사한 마음이다. 아직 무에서 유를 창조하는건 굉장히 어렵지만 그래도 이번에 열정적으로 프로젝트를 해보며 코딩에 또다른 재미를 알게된 것 같아 기쁜마음도 있었다. 아무래도 어렵다보니 재미가 점점 없어진다는 느낌도 받았어서 한편으로 걱정이였는데 그래도 다시 재미를 갖게 되어서 다행이라는 생각을 했다. 앞으로도 혼자서 이것저것 만들어보도록 해야겠다. 그리고 오늘이 성현강사님과 하는 React 마지막 시간이였다. 물론 헤어지는건 아니지만 한동안 못본다고 생각하니 뭔가 마음이 아련하고 영영 못보는것 같은 느낌이였달까? ㅋㅋㅋ 뭔가 블체스가 다 마무리되는 느낌이였달까 그런 느낌이여서 기분이 이상했다. 하지만 정신을 차려야 하는게 다음주부터는 은찬매니저님이 그렇게 말씀하셨던 solidity를 시작하게 된다. 극악의 고통을 느끼게 될거라고 하던데 벌써부터 긴장이 된다. 그리고 그 시간동안 배웠던 React를 까먹게 될까봐 그것도 걱정이고.. 어떻게 해야할지 모르겠지만 일단은 뭐든 부딪혀보는게 중요하다고 생각한다. 주말동안 잘 정리를 하고 민서강사님을 맞이할 준비를 해야겠다.