처음부터 나만의 Vue.js 만들기 - 2부(가상 DOM 기본 사항)
7390 단어 vuejavascript
저는 Vue.js로 작업한 1년의 전문적인 경험이 있지만 Evan You이 직접 제공한 8시간 과정에 참석했습니다(Vue.js Amsterdam의 일환으로 Vue.js가 내부에서 어떻게 작동하는지 배우고 "마술"비하인드 스토리가 작동합니다. 이 블로그 시리즈는 제가 그 환상적인 워크샵에서 배운 것을 포괄적인 방식으로 관심 있는 모든 사람들에게 가르치기 위한 것입니다.
로드맵 🚘
가상 DOM이란 무엇입니까?
💡 DOM = Document Object Model, 웹사이트의 HTML 구조 💡 VDOM = 해당 구조의 대표 사본
가상 DOM은 실제 DOM을 JavaScript 형식으로 표현한 것으로, 무언가가 변경될 때마다 실제 DOM을 조작하는 것보다 조작하는 것이 더 쉽고 저렴합니다.
또한 DOM을 브라우저에 렌더링하지 않고 문자열로 렌더링하려는 경우에도 유용합니다(서버 측 렌더링에 유용함).
가상 노드
따라서 가상 DOM은 가상 노드로 구성되며, 이 예제에서 코딩할 예는 다음과 같습니다.
{
tag: 'div',
props: {
class: 'container'
},
children: [
{
tag: 'h1',
props: {},
children: 'Hello World'
},
{
tag: 'p',
props: {},
children: 'Lorem ipsum dolor sit amet.'
}
]
}
위의 예는 다음 HTML 코드와 동일합니다.
<div class="container">
<h1>Hello World</h1>
<p>Lorem ipsum dolor sit amet.</p>
</div>
따라서 모든 가상 노드는 다음으로 구성됩니다.
따라서 가상 DOM은 가상 노드로 구성되며, 이 예제에서 코딩할 예는 다음과 같습니다.
{
tag: 'div',
props: {
class: 'container'
},
children: [
{
tag: 'h1',
props: {},
children: 'Hello World'
},
{
tag: 'p',
props: {},
children: 'Lorem ipsum dolor sit amet.'
}
]
}
위의 예는 다음 HTML 코드와 동일합니다.
<div class="container">
<h1>Hello World</h1>
<p>Lorem ipsum dolor sit amet.</p>
</div>
따라서 모든 가상 노드는 다음으로 구성됩니다.
가상 DOM 스켈레톤
이 예에서는 본격적인 가상 DOM "엔진"을 구축하지 않지만 기본 사항을 이해하기에 충분합니다.
가상 DOM의 코딩을 살펴보자. 우리는 다음 라인을 기반으로 미래의 모든 코드를 작성할 것입니다. 따라서 다음 내용으로 HTML 파일을 만듭니다.
<div id="app"></app>
<script>
// Create virtual node
function h(tag, props, children) {
// Return the virtual node
}
// Mount a virtual node to the DOM
function mount(vnode, container) {
// Create the element
// Set props
// Handle children
// Mount to the DOM
}
// Unmount a virtual node from the DOM
function unmount(vnode) {
// Unmount the virtual node
}
// Take 2 vnodes, compare & figure out what's the difference
function patch(n1, n2) {
// Case where the nodes are of the same tag
// Case where the new vnode has string children
// Case where the new vnode has an array of vnodes
// Case where the nodes are of different tags
}
function render(message) {
// Render a virtual node with a given message
}
// Create virtual nodes & render them below this line...
</script>
보시다시피 가상 DOM을 만들고 렌더링하는 역할을 하는 5가지 다른 기능이 있습니다.
<div id="app"></app>
<script>
// Create virtual node
function h(tag, props, children) {
// Return the virtual node
}
// Mount a virtual node to the DOM
function mount(vnode, container) {
// Create the element
// Set props
// Handle children
// Mount to the DOM
}
// Unmount a virtual node from the DOM
function unmount(vnode) {
// Unmount the virtual node
}
// Take 2 vnodes, compare & figure out what's the difference
function patch(n1, n2) {
// Case where the nodes are of the same tag
// Case where the new vnode has string children
// Case where the new vnode has an array of vnodes
// Case where the nodes are of different tags
}
function render(message) {
// Render a virtual node with a given message
}
// Create virtual nodes & render them below this line...
</script>
h
가상 노드를 생성합니다(하지만 실제 DOM에 아직 마운트하지 않음). 나는 이것을 h
이라고 불렀다. 왜냐하면 그것이 Vue.js 프로젝트에서도 mount
은 주어진 가상 노드를 가져와 실제 DOM의 주어진 컨테이너에 마운트합니다. 첫 번째 요소의 경우 파일 맨 위에 생성한 #app
노드가 됩니다. unmount
은 부모 노드에서 가상 노드를 제거합니다 patch
은 지금까지 우리가 VDOM에 대해 작성할 가장 큰 기능입니다. 이것은 두 개의 다른 노드를 비교하고 모든 차이점을 재귀적 방식으로 확인해야 하기 때문입니다(모든 자식에 대해 재귀적으로 수행). render
은 렌더링 기능의 단순화된 버전입니다. 이 예에서는 내부에 주어진 메시지가 포함된 다양한 가상 노드를 생성합니다(나중에 VDOM "엔진"작동을 보여주기 위해 변경합니다. 다음은 무엇입니까 ⚡️
1부에서는 Vue.js와 유사한 자체 프레임워크를 구축하는 데 필요한 구축 부분을 살펴보았고 이 부분에서는 가상 돔을 구축하는 방법의 기본 사항을 살펴보았습니다.
다음 장에서는 완전한 가상 DOM 부분을 실제로 구현합니다.
계속 지켜봐 주세요 😉
내 콘텐츠와 업데이트가 마음에 들면 Twitter에서 나를 팔로우하는 것이 가장 좋습니다. 내가 보통 손잡이 아래에서 놀고있는 곳입니다.
Unplash의 Joshua Earle 원본 표지 사진, Marc Backes 편집.
Reference
이 문제에 관하여(처음부터 나만의 Vue.js 만들기 - 2부(가상 DOM 기본 사항)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/themarcba/create-your-own-vue-js-from-scratch-part-2-virtual-dom-basics-58fm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)