package.json
npm install
을 통해 package.json
안의 dependencies
를 다운 받아온다.dependencies
안에 명시된 모듈들은 node_modules
폴더 안에 설치되어 있다.devDependencies
는 개발할 때만 사용하는 것. (devDependencies
와 dependencies
의 차이 검색해보기)Router.js
파일을 통해 필요한 주소 및 컴포넌트들을 확인한다.map
함수로 사용하기.batch형 업데이트 -> 이전의 상태를 참고해서 업데이트하는 방법이 더 안정적이기 때문에 함수형을 사용한다.
// 비동기 : count=1
const [count, setCount] = useState(0);
setCount(count+1);
setCount(count+1);
setCount(count+1);
// 동기 (함수형) : count=3
const [count, setCount] = useState(0);
setCount(prev=>prev+1);
setCount(prev=>prev+1);
setCount(prev=>prev+1);
// 좋아요 버튼 활성화/비활성화
const [isClicked, setIsClicked] = useState(false);
src={isClicked?'heart.png':'redheart.png'};
const Feed = ({ feed:[id,image,user} }) => {}
// 길어지면 아래에 const로 불러오는 게 가독성이 더 좋다.
const Feed = ({ feed }) => {
const {id, image, user, ...}
}
// 수정 전
const onClickComment = e => {
e.preventDefault();
setCommentList([...commentList, input]);
setInput('');
};
// 수정 후
const [id, setId] = useState(0);
const [userId, setUserId] = useState('');
const [timer, setTimer] = useState('');
const onClickComment = e => {
e.preventDefault();
setId(prev=>prev+1);
setTimer(new Date().getMinutes);
setCommentList([...commentList, { id: id, userId: userId, userComment: input, postedTime: timer}]);
setInput('');
};
// 수정 후
const isValid = userId.includes('@') && userPw.length >= 5;
<button className={isValid ? 'activeBtn' : 'Btn'}/>
<button disabled={isValid ? false : true}/>
자주 사용하는 속성들을 하나로 묶어서 사용
@mixin flex() {
display: flex;
justify-content: center;
align-items: center;
}
@include flex();
default 속성 명시 가능
@mixin flex($justify:center, $align:center) {
display: flex;
justify-content: $justify;
align-items: $align;
}
@include flex(center, space-between)
($justify:center, $align:center)
: default parameter는 center지만 ()
안에 들어오는 것에 따라 유동적으로 변함.($justify, $align)
를 명시해놓고 ()
빈 상태로 실행하면 에러!