-
[JS/class] 클래스로 컴포넌트 구현하기 1 - 컴포넌트 생성조각조각/JavaScript 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를 활용한 영화 검색 사이트(링크)
💬 본 포스팅은 공부 기록용으로 정확하지 않은 정보가 존재할 수 있습니다. 발견하신다면 알려주세요!
'조각조각 > JavaScript' 카테고리의 다른 글
[JS] 페이징 - 더보기 버튼 (0) 2024.04.08 [JS/class] 클래스로 컴포넌트 구현하기 2 - 자식 컴포넌트에 데이터 전달하기 (0) 2024.04.04