구조 분해 할당: 배열이나 객체의 속성을 해체하여 그 값을 변수에 담을 수 있게 하는 ES6 문법
* 계산된 속성명: 객체의 속성명이 최초에 결정되는 것이 아니라 동적으로 결정되는 것 (ES6)
* input 태그의 name 속성과 계산된 속성명을 함께 이용하면 여러 개의 input Handler를 하나로 합칠 수 있다.
(name 속성은 오직 input 태그에서만 사용할 수 있음)
ex)
const Example = () => {
const [inputValues, setInputValues] = useState({
id: '',
pw: '',
});
// const handleId = event => {
// const { value } = event.target;
// setInputValues({ ...inputValues, id: value });
// };
// const handlePassword = event => {
// const { value } = event.target;
// setInputValues({ ...inputValues, pw: value });
// };
//위에 함수를 합하면
const handleInput = event => {
const { name, value } = event.target;
setInputValues({ ...inputValues, [name]: value });
};
return (
<>
<input name="id" type="text" onChange={handleInput} />
<input name="pw" type="password" onChange={handleInput} />
</>
);
};
//삼항 연산자
const validLogin = () => {
input.id.includes('@') && input.pw.length > 6
? setIsValid(true)
: setIsValid(false);
};
//논리 연산자
const validLogin = () => {
const isValid = input.id.includes('@') && input.pw.length > 6;
setIsValid(isValid);
};
<button className={isActive ? 'activeBtn' : 'deactiveBtn'}>
Login
</button>
<div>
{ARTICLE_LIST.map(data => {
return (
<li key={data.id}>
<Link to={data.url}>{data.content}</Link>
</li>
);
})}
</div>
*상수는 컴포넌트의 바디 안에서 선언할 경우 컴포넌트가 리렌더링 될 때마다 새로운 변수로 계속 선언되기 때문에 컴포넌트 바디 밖에서 선언하거나 따로 파일을 생성하여 분류하는 것이 좋다
reset.scss & common.scss
a. 각각의 파일에서 따로 reset.scss 와 common.scss를 import 할 필요 없이 index.js에서 한 번만 import 해주기
b. 브라우저의 디폴트 스타일 값을 초기화하기 위해 reset.scss 생성
c. 모든 컴포넌트에 공통적으로 적용되어야 하는 스타일은 common.scss에 작성
variables.scss
반복적으로 사용되는 색깔 변수나 mixin 등은 variables.scss, mixin.scss 등의 별도 파일로 분리하고 필요한 scss 파일에서 import 해서 사용
Sass의 nesting 활용
CSS className 중복 오류를 막기 위해 최상위 태그의 클래스 네임을 컴포넌트의 이름으로 하고 종속 관계에 맞게 CSS 속성들도 nesting 한다.