다덜 이과제 기억하십니까
오랜만에 리액트라 어리바리지만
다행이 오늘 완성을 하였고,
오늘 만났던 오류들에 대한 리뷰를 시작하겠습니돠
트러블 슈팅을 해봐야쥐
문제
key를 잘못줬더니 warning은 warning대로 뜨고, 배열의 요소를 삭제를 하면 이상하게 삭제가 되었다. 어떤 object는 삭제되고, 어떤 object는 남고..
끔찍한 혼종의 패러다임속에서 콘솔도 찍어보고 했으나 배열은 제대로 삭제가 되고 있는데 화면에 남는 html쪽이 이상한 거였다. 알고보니 내가 key를 주는 위치를 잘못잡았다.
해결
--> key는 맵이 시작하는 제일 앞에 태그에 남겨야 한다.
태그가 <>이렇게 빈 태그여도 남길 수가 있는데 그때는 Fragment라고 남겨야 한다.
(ctrl+space로 자동완성도 가능하다.)
{todoList.map((x, i) => {
return (
<Fragment key={x.title}>
Fragment에서 남길수 있는 prop은 key가 유일하다.
div를 사용하기 곤란할때 유용하게 이용된다.
<Layout>
<Header />
</Layout>
const Layout = (prop) => {
return <>{prop.children}</>;
};
아직 prop에 대해 공부할게 많음을 느끼게 되는 날이다.
그리고
이영상으로 한방에 이해했다.
https://www.youtube.com/watch?v=JpM9hiQTlAk
문제
부모컴포넌트의 state는 출력이 잘 되는데 props를 넘긴 자식컴포넌트에서는
콘솔로 찍었을때
한번은 제대로
힌번은 undefined로 출력된다.
처음에는 useEffect문제인줄 알고 그쪽을 계속 수정하였지만
변함이 없었다.
해결
컴포넌트가 많다보니 실수로 다른 컴포넌트에 문제가 되는 컴포넌트를 하나더 넣어놨던 것 이다. 그쪽 컴포넌트에서 undefined가 나온거였다.
해당 컴포넌트를 삭제하니 해결이 되었다.
setTodoDone([...todoDone,test]);
state를 변경하였는데 새로운 변경된 state로 안나오고 계속 이전 state만 반환하였다.
setTodoDone([...todoDone, ...test2]);
문제
우선 내가 구현해야 하는부분이 한페이지에 같은 컴포넌트를 두개를 넣어주고 한개는 해당컴포넌트가 true일때 모습
한개는 false일때 모습을 출력해야한다.
해결
true일때 state를 done이라고 주었다.
그래서 앞에 컴포넌트에는 props를 done을 통째로 박아주었고,
뒤에는 done을 아예주지 않았다.
그럼 자식 컴포넌트에서는 false라고 인식하게 된다.
참고: https://developer-talk.tistory.com/226 [평범한 직장인의 공부 정리:티스토리]