(Javascript) 나의 학습 여정: 웹 컴포넌트
13746 단어 tutorialjavascriptbeginners
더 이상 고민하지 않고 여기에 오늘의 메모 요약이 있습니다.
웹 컴포넌트란?
웹 페이지 및 웹 앱에서 사용할 사용자 정의되고 재사용 가능하며 캡슐화된 html 태그를 생성할 수 있는 웹 플랫폼 API 세트입니다.
웹 구성 요소에는 특별한 자바스크립트 라이브러리나 프레임워크가 필요하지 않습니다.
웹 구성 요소에는 3가지 주요 빌딩 블록이 있습니다.
맞춤 요소:
사용자 정의 HTML 태그, 사용자 정의 클래스 및 라이프사이클 메소드 생성
// class inherits from HTMLElement
class customButton extends HTMLElement {
...
}
// To bind the new custom element
window.customElements.define('x-button', customButton)
라이프사이클 방법:
섀도우 DOM:
HTML 템플릿:
내 첫 번째 구성 요소
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web Component</title>
</head>
<body>
<panic-button></panic-button>
<script src="panicButton.js"></script>
</body>
</html>
패닉버튼.js
class panicButton extends HTMLElement {
constructor() {
// Call HTMLElement constructor
super()
// Add some content to our component
this.innerHTML = `Hello World`
}
}
// Bind our component
window.customElements.define('panic-button', panicButton)
내 첫 번째 구성 요소... 더 잘할 수 있을 것 같아요 :)
속성 추가
index.html
<panic-button message="Women and Children first"></panic-button>
패닉버튼.js
class panicButton extends HTMLElement {
constructor() {
// Call HTMLElement constructor
super()
// use getAttribute to retrieved attribute
this.innerHTML = `P A N I C - ${this.getAttribute('message')}`
}
}
// Bind our component
window.customElements.define('panic-button', panicButton)
ShadowRoot 사용:
// Create the element with custom CSS and HTML
const template = document.createElement('template')
template.innerHTML = `
<style>
button {
color: white;
background-color: red;
font-size: 16px;
padding: 12px;
}
</style>
<div>
<button></button>
</div>
`
// Create web component
class panicButton extends HTMLElement {
constructor() {
super()
// Create the ShadowRoot
this.attachShadow({mode: 'open'})
// Add our component inside our ShadowRoot
this.shadowRoot.appendChild(template.content.cloneNode(true))
// Set attributes
this.shadowRoot.querySelector('button').innerText = `P A N I C : ${this.getAttribute('message')}`
}
}
window.customElements.define('panic-button', panicButton)
index.html 실행
슬롯 사용
<panic-button>Women and Children First</panic-button>
// Add the <slot /> tag
const template = document.createElement('template')
template.innerHTML = `
<style>
button {
color: white;
background-color: red;
font-size: 16px;
padding: 12px;
}
</style>
<div>
<button><slot /></button>
</div>
`
다중 슬롯
<panic-button>
<div slot="message">General Alert</div>
<div slot="image"><img src="alter.jpg"></div>
</panic-button>
// Add the multiple slot tag by name
const template = document.createElement('template')
template.innerHTML = `
<style>
button {
color: white;
background-color: red;
font-size: 16px;
padding: 12px;
}
</style>
<div>
<button>
<slot name="message"/>
<slot name="image"/>
</button>
</div>
`
이벤트
class panicButton extends HTMLElement {
constructor() {
...
}
// Add the event listener inside this lifecycle hook
connectedCallback() {
this.shadowRoot.querySelector('button').addEventListener('click', e => {
alert('This is not a exercice!')
})
}
}
결론
오늘은 여기까지입니다. 웹 구성 요소에 대한 자세한 정보가 필요한 경우 여기에서 읽을 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/Web_Components
내가 쓴 글이 마음에 든다면 내가 Dev.to에 새 게시물을 게시할 때 알림을 받으려면 팔로우를 클릭하세요.
Reference
이 문제에 관하여((Javascript) 나의 학습 여정: 웹 컴포넌트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ericchapman/javascript-my-learning-journey-web-component-166j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)