Next学习手册(一)DOM
React工作原理
当浏览器试图访问一个网页时,会得到诸如下图一样的响应内容:
然后浏览器将通过此响应内容,构造 DOM (文档对象模型)。
然后才是我们所看到的UI界面。
什么是DOM?
对于什么是DOM,Next.js
官方给出了如下解释。
The DOM is an object representation of the HTML elements. It acts as a bridge between your code and the user interface, and has a tree-like structure with parent and child relationships.
翻译:DOM是HTML元素的对象表示。它充当代码和用户界面之间的桥梁,并具有具有父子关系的树状结构。
这意味着我们可以通过DOM界面以及程序来监听用户事件,并通过修改元素来操作DOM。
示例一:
假设我们有一个HTML文件,内容如下:
1 | <html> |
这个HTML中,我们给<div>
加了一个唯一的id,为了方便针对。并且为了在HTML中编写javascript代码,添加了标记。
现在通过一个DOM方法,getElementByID()
来根据id
选择<div>
标签。
1 | <!-- index.html --> |
然后继续使用DOM方法创建一个新的元素。
1 | <!-- index.html --> |
接着我们可以看到如下页面:
HTML AND DOM
通过查看页面DOM元素,我们会看到页面中包含<h1>
元素,这与我们的源代码不同。
原因就是,HTML表示的是初始页面内容,而DOM表示修改后的页面内容。之所以呈现不同,就是因为我们看到的页面已经被编写的javascript 代码修改过了。
使用简单的javascript代码来更新DOM非常强大,但代码很冗长。我们使用了如下7行代码来更新了一个<h1>
元素及其内容。
1 | <!-- index.html --> |
随着应用体积增长,使用这种方法编写应用会越来越难。但开发者通过编写指令,描述想现实的内容,让计算机知道该如何更新DOM,这是很不错的。
命令式编程和声明式编程
上面的代码是命令式编程的例子,我们编写如何更新用户界面的步骤。但涉及到构建用户界面时,声明式编程是首选的,因为这可以加快开发过程。
In other words, imperative programming is like giving a chef step-by-step instructions on how to make a pizza. Declarative programming is like ordering a pizza without being concerned about the steps it takes to make the pizza. 🍕 — Next.js