코드스쿼드 마스터즈 21주차 마무리 회고록 🙂
TIL 🧐
- 아토믹 디자인 참고해서 layout 페이지 만들기
- react portal
- JSX 이해하기
- style components prop 타입 지정하기
- 함수 매개변수와 반환값 타입 구체적으로 지정하기
- 객체 키값으로 문자열 변수를 사용할 때 에러 해결하기
- MSW에서 쿼리 사용하기
삽질기
이번 주도 역시 삽질과 고뇌의 시간을 가졌다.
JSX
import해온 함수 컴포넌트를 변수에 저장하여 return문 안에서 태그로 만들어 사용하려고 했으나 에러가 떴다 ^_ㅠ
// .tsx
import PeriodModal from '@components/Modal/PeriodModal';
import PriceModal from '@components/Modal/PriceModal';
function SearchBar() {
const getSelectedModal = () => {
switch (selectedModalName) {
case 'checkin':
setSelectedModal(PeriodModal);
break;
case 'checkout':
setSelectedModal(PeriodModal);
break;
...
}
};
...
return (
...
{<selectedModal />} // Error!
...
);
}
switch 문에서 태그로 바꾸어 저장하여 return 문 안에서 변수를 호출하니 사용이 되었다.
import PeriodModal from '@components/Modal/PeriodModal';
import PriceModal from '@components/Modal/PriceModal';
function SearchBar() {
const getSelectedModal = () => {
switch (selectedModalName) {
case 'checkin':
setSelectedModal(<PeriodModal />);
break;
case 'checkout':
setSelectedModal(<PeriodModal />);
break;
...
}
};
...
return (
...
{selectedModal}
...
);
}
아직 JSX의 동작 방식을 제대로 이해못한거 같다 ㅠ_ㅠ
기록해놓고 주말에 공부 리스트 추가..
옵셔널 체이닝
처음에 canvas.getContext 속성을 사용했는데 타입스크립트 오류가 떴다.
context가 null 일수도 있다고 경고하고 있었다.
const drawStickChartAboutPrice = () => {
const context = canvas.getContext("2d");
context.strokeStyle = COLOR.BLACK; // Object is possibly 'null'.
...
heightOfSticks.reduce(({ x, width }, height) => {
context.fillRect(x, 100 - height, width, height); // Object is possibly 'null'.
return { x: x + width + 1, width };
}, initialValue);
};
그래서 구글링을 하니 옵셔널 체이닝, 타입 단언 사용, if문으로 null 처리 등 여러가지 방법이 있었다.
그 중 옵셔널 체이닝이 가장 코드상 깔끔해보여서 옵셔널 체이닝으로 수정했다.
const drawStickChartAboutPrice = () => {
const context = canvas.getContext("2d");
context?.strokeStyle = COLOR.BLACK; // The left-hand side of an assignment expression may not be an optional property access.
...
heightOfSticks.reduce(({ x, width }, height) => {
context?.fillRect(x, 100 - height, width, height); // 에러 해결
return { x: x + width + 1, width };
}, initialValue);
};
그랬더니 또 다른 에러가 나왔다.
저 에러가 무슨 말인지 이해가 잘 안가서 (한글로 알려줄 순 없겠니? 😬)
스택오버 플로우에 찾아보니 옵셔널 체이닝은 왼쪽에 값을 할당하는 식에서는 사용할 수 없다고 한다 ^_ㅠ
결국 늘 하던대로 if문으로 처리 끗..
const drawStickChartAboutPrice = () => {
const context = canvas.getContext("2d");
if(!context) return; // 에러 해결
context?.strokeStyle = COLOR.BLACK;
...
heightOfSticks.reduce(({ x, width }, height) => {
context?.fillRect(x, 100 - height, width, height); // 에러 해결
return { x: x + width + 1, width };
}, initialValue);
};
아쉬워요 🙁
이번 주에 옐로우가 사정이 있으셔서 혼자 할 일이 좀 있다보니 진도가 잘 안나갔다.
이상하게 코쿼 초반에는 진도 차이 크게 신경쓰지 않았는데 오히려 요즘 진도 차이가 나면 조급해진거 같기도 하다.
피어세션 시간이 얻는게 많아 알차기도 하지만 비교도 하게 되는.. 피어세션의 유일한 단점이랄까..?_?
타입스크립트는 전 주에 비해서는 에러 해결을 하고 있지만.. 이해하지 못하고 쓰는 경우도 있는거 같다.
주말 스터디때 좀 더 열심히 해야겠다.
잘했어요 🙂
혼자하는 시간이 지치기도 했지만 그래도 PR 안놓치고 주말에라도 보낸 점은 칭찬해주고 싶다.
코쿼하면서 PR 못보낸 적이 딱 한 번이다. 늦더라도 항상 보내려고 노력한 덕 분이랄까..?? (물론 제 시간에 내면 더 좋겠지만 ^_ㅠ)
그래도 포기하지 않고 끝까지 낸거니까 잘한거겠지?_?
하지만 덕분에 오랜만에 몸이 안좋다..@_@
요 근래 계속 5시 넘어서 잤는데 주말에 PR마저 보내고, 주말에 스터디가 2개가 되버리니 쉬지 못해서 그런거 같다..ㅠㅠ
잠자는 시간 좀 늘려야 하는데.. 코쿼 끝나면 생활패턴 다시 돌려야겠다 꼭..!ㅠ