조각조각/JavaScript
[JS/class] 클래스로 컴포넌트 구현하기 1 - 컴포넌트 생성
now()
2024. 4. 3. 14:35
프론트엔드 웹 개발의 모든 것 초격차 패키지 Online. 강좌를 보며 새롭게 알게 된 사실들을 기록합니다.🙌
💬 포트폴리오 사이트를 자바스크립트로 작업하면서 라우팅에 막혀 엄청 헤맸는데, 결국은.. SPA로 만드는 것이 답이었다는 것을..🥲 일단 강좌 보면서 어떤 식으로 구성이 되는지 파악하고, 다시 내 프로젝트에 적용시켜 보기로 하였다.
1. class 구조
class User {
constructor(매개변수1, 매개변수2..) {
// 함수 역할
// 로직
}
메서드명() {
return 로직;
}
}
2. 컴포넌트 생성(SPA 방식)
1. index.html의 <div id="root"></div> 안에 모든 내용이 그려진다.
2. id가 root인 div 요소 안에 생성자 함수로 사용할 수 있는 클래스 개념 추가
3. 공통으로 사용할 수 있는 core 개념의 클래스 생성 필요
4. core 클래스를 상속받은 컴포넌트 생성하여 활용
5. 데이터를 여러 컴포넌트에서 사용할 수 있도록 store 개념의 생성자 함수 생성 필요
2-1. 클래스 컴포넌트 App의 기본 구조
export default class App {
// 클래스를 생성하면 하나의 객체 데이터가 완성됨
// 만들어진 객체 데이터는 this 키워드를 통해 el 속성으로 메모리 상에만 만들어져 있는 div 요소를 하나 가짐
constructor() {
// 생성될 때
this.el = document.createElement("div"); // 자기 자신의 el 변수에 메모리상에만 추가하는 div 생성
this.el.textContent = "Hello world!"; // div요소에 textContent로 문자 할당
}
}
2-2. Component의 구조
export class Component {
// 원하는 태그를 동적으로 처리하기 위해 매개변수로 태그명 받아옴
constructor(payload = {}) {
const { tagName = "div", state = {}, props = {} } = payload; // tagName의 기본값으로 div 할당
this.el = document.createElement(tagName);
this.state = state;
this.props = props;
this.render();
}
render() {
// ...
}
}
3. 컴포넌트 조건과 반복
import { Component } from "./core/heropy";
// 상속
export default class App extends Component {
constructor() {
super({
state: {
fruites: [
{
name: "Apple",
price: 1000,
},
{
name: "Banana",
price: 2000,
},
{
name: "Cherry",
price: 3000,
},
],
},
});
}
render() {
this.el.innerHTML = `
<h1>Fruits</h1>
<ul>
${this.state.fruites
.filter((fruit) => fruit.price < 3000)
.map((fruit) => `<li>${fruit.name}</li>`)
.join("")}
</ul>
`;
}
}
3-1. join으로 문자열을 만들어주는 이유
map은 새로운 배열을 다시 반환해주기 때문!
console.log(this.state.fruites.map((fruit) => <li>${fruit.name}</li>));
this.state.fruites.map((fruit) => <li>${fruit.name}</li>).join(",")
👾 3-2) 리스트 렌더링시 ,는 어디서 온 것인가..
// ,가 같이 출력된 이유
this.state.fruites.map((fruit) => <li>${fruit.name}</li>).join("")
// 위 코드에서 join에 ,를 반드시 추가해줘야한다.
this.state.fruites.map((fruit) => <li>${fruit.name}</li>).join(",")
배열의 각 요소를 문자열로 결합할 때 Array.join() 메서드에 구분자를 지정하지 않으면 기본적으로 쉼표가 사용돼서 각 요소 사이에 쉼표가 추가된다. 그러니 꼭 , 로 구분해 주자.
[패스트캠퍼스 인강] 프론트엔드 웹 개발의 모든 것 초격차 패키지 Online - API를 활용한 영화 검색 사이트(링크)
💬 본 포스팅은 공부 기록용으로 정확하지 않은 정보가 존재할 수 있습니다. 발견하신다면 알려주세요!