📘 오늘의 공부
- 개인과제 트러블슈팅
- styled components 실행 오류
- CRA 생성이 하위 폴더에?!
- 조건부 스타일링
- 새롭게 배운 지식
- 조건부 스타일링
- src 절대경로
- style components에서의 hover
1. styled-components 오류
문제 : styled components
작성 전에는 npm start로 브라우저 잘 실행시키고 있었는데, styled 적용하니 갑자기 npm start
가 안됨
원인 : styled-components 패키지는 상위 폴더에 설치됐고, 내가 작성중인 프로젝트는 하위 폴더에 있었음
해결 : fan-letter 폴더에 styled components 패키지를 다시 깔았더니 정상 실행됨
새롭게 알게된 것 : git clone 하고 나서 폴더이름의 대문자를 모두 수정하자!
-> 그 다음 CRA를 하고, CRA하는 폴더 위치를 ./
로 지정하면 해당 폴더에 바로 프로젝트 생성 가능!
2. 폴더 안에 새로운 폴더로 CRA해서 생기는 문제 해결하기
발생된 문제들
해결
3. 컴포넌트 분리시 import 파일명에서의 에러
에러 메시지 : 이미 포함된 파일이름 './components/Header.jsx' 은 파일이름'./components/header.jsx'와 대소문자만 다릅니다.
해결 : VSC 코드 껐다 켜기로 해결됨....
(참고 : 나와 같은 오류의 해결법 3가지)
참고할 다른 해결방법
파일명을 제3의 파일명으로 변경했다가 다시 되돌려도 됨.
(ex: auth.ts -> temp.ts -> auth.ts)
에러 경고 -> 제 3의 파일명 -> 다시 되돌리기(해결)
tsconfig.json 파일에서 forceConsistentCasingInFileNames 설정 바꿔주기
4. 버튼 클릭하면 버튼색 바뀌도록 조건부 스타일링 적용하기
문제
onClick
이랑... useState
랑... style component
파일에 ${ }
로 조건부 스타일링 적용하고... 그러면 될것같은데... 대체 어떻게 적용해야 하는거지?!
useState는 멤버 이름으로 해야하는지, 버튼에 Id같은걸 줘야하는지...
스타일링 파일에는 ${ } 안에 뭘 넣어야하지? if문 같은걸 넣어야 되나? 클릭하면 배경색 바뀌어야 하는데 그 '클릭'한 버튼은 뭘로 어떻게 전달해야하지...?
해결
const [activeButton, setActiveButton] = useState('');
const activeButtonChangeHandler = (member)=>{setActiveButton(member)}
const memberButton = memberArr.map((member) => {
return <styles.HeaderBtn
key={member}
active={activeButton === member}
onClick={()=>activeButtonChangeHandler(member)}>{member}
</styles.HeaderBtn>;
})
active={activeButton === member}
: activeButton이 map에서 돌고있는 해당 member와 같은 값일 때 배경색을 바꾸려고 큰그림 미리 작성해놓음background-color: ${(props) => (props.active ? "yellow" : "gray")};
activeButton === member
이 부분이 참이면 색을 바꿔라 라는 뜻1. styled components - 컴포넌트 파일 분리 방법
컴포넌트이름.styles.js
styled
import하기export
붙이기import * as styles from "./Header.styles"
*
: 모든 것들을 지칭styles
: 변수명(모든애들 (*)을 'styles'라는 이름으로 불러올거야)styles.변수이름
으로 수정하기<styles.HeaderH1>
2. src 절대경로 설정하기
jsconfig.json
jsconfig.json
파일 생성 {
"compilerOptions": {
"baseUrl": "src"
},
"include": [
"src"
]
}
./
붙일필요 없어짐)3. styled components로 hover 이벤트 주기
&:hover {내용}
const Li = styled.li`
border: 1px solid white;
border-radius: 10px;
box-sizing: border-box;
padding: 20px;
margin: 20px;
&:hover { // hover 이벤트 부분
transform: scale(1.05);
cursor: pointer;
transition: 0.3s;
}
`;