<CheckBox
key={idx}
value={name}
checked={filter?.includes(name)}
onChange={(e) => { // ❌
if (e.target.checked) {
onChange([...filter, name]);
} else {
filter.length === brand.length
? onChange([name])
: onChange(filter.filter((opt) => opt !== name));
}
}}
/>
- (변경 후)
함수를 새로 생성해서 마크업 가독성을 높여주자!!const handleCheckBoxChange = (name, e) => { // ✅ if (e.target.checked) { onChange([...filter, name]); } else { filter.length === brand.length ? onChange([name]) : onChange(filter.filter((opt) => opt !== name)); } }; return ( //생략.. <CheckBox key={idx} value={name} checked={filter?.includes(name)} onChange={(e) => handleCheckBoxChange(name, e)} // ✅ /> );
const titleName = title.length > 25 ? title.substring(0, 25).concat("...") : title;
- (변경 후)
css를 사용해서 화면에 예쁘게 나오도록 수정한다.overflow: hidden; white-space:nowrap; // 공백 문자를 처리하는 법을 지정 text-overflow:ellipsis; // 박스 안에 내용이 넘칠 때 텍스트를 어떻게 처리할지 지정
함수 인자는 2개 이하가 이상적
es6의 비구조화(destructuring) 구문을 사용
// ❌ 안좋은 예 function createMenu(title, body, buttonText, cancellable) { // ... }
// ⭕ 좋은 예 function createMenu({ title, body, buttonText, cancellable }) { // ... } createMenu({ title: 'Foo', body: 'Bar', buttonText: 'Baz', cancellable: true });
// ❌ 안좋은 예 function emailClients(clients) { clients.forEach(client => { const clientRecord = database.lookup(client); if (clientRecord.isActive()) { email(client); } }); }
// ⭕ 좋은 예 function emailClients(clients) { clients .filter(isClientActive) .forEach(email); } function isClientActive(client) { const clientRecord = database.lookup(client); return clientRecord.isActive(); }
Array.prototype.diff = function diff(comparisonArray) {
const hash = new Set(comparisonArray);
return this.filter(elem => !hash.has(elem));
};
state는 오직 상호작용을 위해, 즉 시간이 지남에 따라 데이터가 바뀌는 것에 사용되어야 한다.
중복배제원칙
: 애플리케이션이 필요로 하는 가장 최소한의 state를 찾자.
// 1. import 순서도 경로(or연관)에 따라 묶어주자
// ex) 멀리 있는 것 부터 차례대로// 2. propType
// 3. 컴포넌트 정의
// 4. Styled Component
// 5. 간단한 상수 설정
// 6. 해당 컴포넌트에서만 사용할 함수
1. import도 술술 읽힐 수 있도록 해야 한다.
이 파일에서는 어떤 것들이 필요하구나! 알 수 있도록. 가독성을 위해 import 분류별로 한줄 띄워도 괜찮다.
2. ts를 안 쓰는 경우, 있으면 좋다.
3. 컴포넌트부터 정의하여, 이 컴포넌트가 무슨 역할을 하는지 한 번에 알아볼 수 있도록 하자.
4. styled component 썼다면, 컴포넌트 다음에 정의
5. 간단한 상수 설정, 간단한 data 등.. 혹시 data가 객체에 너무 길면 외부 파일로 분리하자.
6. 공통으로 사용하는 utils 성 함수는 아닌 경우, 로직인 경우 밖으로 빼자.