Vue3 基本语法

news2024/11/24 4:08:01

尤雨溪

文章目录

  • 前言
  • MVVM框架
  • 认识Vue
  • 文本渲染指令 v-text
  • 属性绑定指令
    • title 属性动态绑定
    • class属性动态绑定
    • style 属性动态绑定
  • 事件绑定 @事件名
  • 条件渲染指令
    • v-if
    • v-if 和 v-show
    • v-else 和 v-else-if
  • 循环遍历指令


前言

提示:这里可以添加本文要记录的大概内容:

学习前端Vue框架有以下几个原因:

  1. Vue是一种轻量级前端框架,易于学习和使用;
  2. Vue具有完善的文档和社区支持,可以轻松地找到解决问题的方法;
  3. Vue使用组件化的编程方式,可以帮助你更好地管理和组织代码;
  4. Vue具有丰富的生态系统,包括大量的第三方组件和插件,可以帮助你更快速地开发应用程序;
  5. Vue在移动端开发中有很好的表现,可以帮助你快速构建响应式的用户界面;
  6. Vue在大型项目中的性能表现也很好,可以满足高要求的开发需求。

Vue开发核心的关注点:数据的变化
简化DOM编程


提示:以下是本篇文章正文内容,下面案例可供参考

MVVM框架

在这里插入图片描述

认识Vue

vue.js的在线引用地址(vue 官方引入地址):

<script src="https://unpkg.com/vue@next"></script>

以下是使用Vue.js写一个简单的"Hello World"应用程序的示例:

  1. 引入Vue.js文件
  2. 创建vue实例对象,需要传入配置对象(最重要的:data)
  3. 将创建的vue实例对象,挂载到视图中某个标记上(vm.mount(‘#xxx’) CSS语法)
  4. 最大的div内使用插值语法

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 -->
        <h1>{{title}}</h1>
    </div>
</body>
<!-- 1.引入vue js文件(这里可以替换成网页) -->
<script src="./js/vue3.js"></script>

<script>
    // 2.创建vue实例对象,需要传入配置对象
    // 配置对象中需要指定若干个配置项 data代表数据配置项
    let vm = Vue.createApp({
        data() {
            return {
                title: 'Hello World'
            }
        },
    })

    // 3.将创建的vue实例对象,挂载到视图中某个标记上
    vm.mount('#app')
    // css选择器思想
</script>
</html>

输出效果:
在这里插入图片描述
上面是单项绑定,下面是双向绑定

<body>
    <div id="app">
        <!-- 4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 -->
        <h1>{{title}}</h1>
        <input type="text" v-model="title">
    </div>
</body>

输出效果:
在这里插入图片描述
在输入框内更改内容,上面h1内容也会随之改变
在这里插入图片描述

文本渲染指令 v-text

v-text指令:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div v-text="x">
        </div>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                x: '<h1>xxx</h1>'
            }
        },
    })
    vm.mount('#app')
</script>
</html>

输出效果:
把里面内容当做纯文本写出
在这里插入图片描述
把v-text改成插值语法:

<body>
    <div id="app">
        <div>
            {{x}}
        </div>
    </div>
</body>

效果一样
在这里插入图片描述
v-text 修改innerText属性 v-html修改innerHtml 属性
v-text 等同于{{插值语法}}

属性绑定指令

它可以动态地绑定一个属性的值。
可以将一个组件的class属性绑定到Vue实例中的一个数据属性上,以实现动态的样式控制

title 属性动态绑定

和class和style属性绑定类似,通过v-bind指令,我们可以将元素的title属性与Vue实例中的数据属性绑定起来,实现动态绑定,当绑定的数据属性发生变化时,title属性的值也会随之动态更新,从而实现动态绑定

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <a :href="address">跳转</a>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                address:'https://rej177.blog.csdn.net/article/details/131444680'
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出结果
在这里插入图片描述

class属性动态绑定

可以将一个或多个class类名与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,class类名也会随之动态更新

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .one{
            color: aqua;
        }
        .two{
            color: yellowgreen;
        }
        .three{
            font-size: 50px;
        }
    </style>
</head>
<body>
    <div id="app">
        <p :class="className">杰瑞</p>
        <p :class="[className,className1]">汤姆</p>
        <p :class="{one: flag}">斯派克</p>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                className: 'two',
                // 改成one变成湖绿色
                // className: 'one',
                // 多个属性配置中间加逗号分割
                className1: 'three',
                flag: true,
                // true生效,false不生效
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

style 属性动态绑定

可以将一个或多个样式属性与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,样式属性也会随之动态更新

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p :style="{textAlign: a,backgroundColor: b}">二哈喇子!</p>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                a: 'center',
                b: 'pink'
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

事件绑定 @事件名

Vue中事件执行的函数,必须编写在methods配置项中

methods函数体中想要访问data配置项中配置的数据,必须加this.前缀

【示例代码】:

模拟购物车的加减数据
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- Vue开发两个最基本的最重要的配置项是 data 和 methods  -->
    <!-- Vue开发核心的关注点:数据的变化 -->
    <div id="app">
        <button @click="minus">-</button>
        {{num}}
        <button @click="plus">+</button>
        <!-- 事件绑定是 v-on事件名 简写成:@事件名 -->
        <div @click="b" style="width: 200px;height: 200px;border: 1px solid red;">
            <div @click.stop="a" style="width: 50px;height: 50px;background-color: yellow;"></div>
        </div>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                num: 1
            }
        },
        // Vue中事件执行的函数,必须编写在methods配置项中
        methods: {
            // methods中定义的函数,function可以省略
            plus: function (event) {
                event.preventDefault()
                // methods函数体中想要访问data配置项中配置的数据,必须加this.前缀
                this.num++
            },
            minus: function (event) {
                event.preventDefault()
                if (this.num > 0) {
                    this.num--
                }
            },
            a: function () {
                console.log('点击子标记')
            },
            b: function () {
                console.log('点击父标记');
            }
        },
    })
    vm.mount('#app')

</script>

</html>

输出效果:
在这里插入图片描述

上述代码是一个基本的 Vue 应用,实现了一个计数器和一个嵌套的 div 元素,其中包含一个子元素。下面是代码的详细解释:

这段代码是一个基本的 HTML + Vue.js 页面,它包含了一个加减按钮和一个反弹的黄色小方块。

这个页面的主要步骤如下:

  1. 在页面头部使用<script>标签引入 Vue.js 库。

  2. 在页面的<body>标签中添加一个<div>标签,它有一个 ID 属性值为“app”。

  3. 在这个<div>标签中添加两个按钮,分别是“+”和“-”,并绑定对应的事件处理函数 plus 和 minus。

  4. 在这个<div>标签中添加一个反弹的黄色小方块,它有一个父元素和一个子元素。我们可以通过给这两个元素绑定鼠标点击事件来观察事件冒泡和阻止冒泡的效果。

  5. 在标签底部使用<script>标签定义一个 Vue 实例 vm,并在实例中定义 data 属性和 methods 方法。

  6. data 属性中只有一个数值类型变量 num,表示当前数值。

  7. methods 方法中包含了四个函数 plus、minus、a 和 b,分别用于增加数值、减少数值、输出点击子标记和输出点击父标记。

  8. 使用 vm.mount 方法将 Vue 实例挂载到页面中的 app 元素上。

当用户在页面上点击加减按钮或小方块时,Vue 实例会执行对应的函数来改变数据,并将改变后的数据重新渲染到页面上。同时也能看到事件冒泡和阻止冒泡的效果。

条件渲染指令

条件渲染指令是指在前端框架(如Vue、React等)中,根据条件判断是否渲染DOM节点的指令。在Vue中,条件渲染指令包括v-if和v-show两种:

v-if

v-if指令会根据表达式的值(true或false)来添加或删除DOM节点,如果值为false,则节点会从DOM中删除;如果值为true,则节点会添加到DOM中。
该指令的优点是可以节省DOM节点的渲染,但缺点是在条件切换时会重新渲染整个节点。

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="isShow">条件渲染</div>
    <div v-if="price<=800">价格太贵了,买不起</div>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        // 显示的值为true时会显示出来
        isShow: true,
        // 默认不显示,只有price<=800时会显示
        price: 900
      }
    },
  })
  vm.mount('#app')
</script>
</html>

v-if 和 v-show

v-ifv-show 区别:

  1. v-if是真正的条件渲染,隐藏的实现是直接将标记动态删除掉
  2. v-show是通过修改标记的display样式来控制标记的显示隐藏
  3. v-show效率高,如果某个标记需要频繁的切换显示隐藏状态,建议使用v-show

【示例代码v-if】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="flag">hello world</div>
    <button @click="change">切换</button>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        flag: true
      }
    },
    methods: {
      change(){
        this.flag=!this.flag
      }
    },
  })
  vm.mount('#app')
</script>
</html>

请添加图片描述
【示例代码v-show】:
把第十行的<div v-if="flag">hello world</div>换成v-show
请添加图片描述

v-else 和 v-else-if

该示例中还引入了Vue 3的JS文件vue3.js,并在HTML的尾部使用vm.mount挂载Vue实例到<div id="app">处,从而使得Vue能够监视和响应数据的变化,实现动态更新页面内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="type==1">A</div>
    <div v-else-if="type==1">B</div>
    <div v-else>C</div>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        type: 1
      }
    },
  })
  vm.mount('#app')
</script>
</html>

如果type等于1,则显示文本“A”;
如果type不等于1,但等于1的话,则显示文本“B”;
如果type既不等于1也不等于2,则显示文本“C”。

循环遍历指令

在 Vue 中,可以使用 v-for 指令来循环遍历数组或对象,并生成相应的元素。

<div v-for="(item, index) in items">
  {{ index }} - {{ item }}
</div>

其中,items 是要遍历的数组或对象,item 表示当前循环的元素,index 表示当前元素的索引。

如果是数组,index 就是当前元素的下标;
如果是对象,index 就是当前元素的键名。

除了数组和对象,还可以循环遍历数字,例如:

<div v-for="i in 5">
  {{ i }}
</div>

上述代码会生成 5 个 div 元素,分别显示数字 1 到 5。

【循环遍历指令示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <ul>
      <li v-for="game in arr">{{game}}</li>
    </ul>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        arr: ['我的世界','英雄联盟','CS:GO']
      }
    },
  })
  vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述
【例】Vue商品列表删除操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>商品列表</title>
    <style>
        table{
            width: 100%;
            border-collapse: collapse;
            border: 1px solid #298cce;
            margin-top: 20px;
        }
        th, td{
            padding: 10px;
            text-align: center;
            border: 1px solid #298cce;
        }
        th{
            background-color: #f2f2f2;
        }
        tr:nth-child(even){
            background-color: #f2f2f2;
        }
        button{
            background-color: #298cce;
            color: #fff;
            border: none;
            padding: 6px 10px;
            cursor: pointer;
        }
    </style>
</head>
<body>
   <div id="app">
        <table>
            <caption><h2>商品列表</h2></caption>
            <thead>
                <tr>
                    <th>序号</th>
                    <th>品牌</th>
                    <th>型号</th>
                    <th>成色</th>
                    <th>售后服务</th>
                    <th>连接方式</th>
                    <th>套餐类型</th>
                    <th>价格</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(goods, index) in goods">
                    <td>{{index+1}}</td>
                    <td>{{goods.brand}}</td>
                    <td>{{goods.model}}</td>
                    <td>{{goods.fineness}}</td>
                    <td>{{goods.after}}</td>
                    <td>{{goods.connection}}</td>
                    <td>{{goods.type}}</td>
                    <td>{{goods.price}}</td>
                    <td><button @click="del(index)">删除</button></td>
                </tr>
            </tbody>
        </table>
   </div> 
</body>
<script src="../js/vue3.js"></script>
<!-- 代替vue.js网页 -->
<script>
    let vm = Vue.createApp({
        data() {
            return {
                goods: [
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '一年质保',
                        connection: '有线/无线',
                        type: '基础版',
                        price: '500',
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '两年质保',
                        connection: '有线/无线',
                        type: '进阶版',
                        price: '600'
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '一年质保',
                        connection: '无线',
                        type: '战损版',
                        price: '500'
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '两年质保',
                        connection: '有线/无线',
                        type: '高级版',
                        price: '700'
                    },
                ]
            }
        },
        methods: {
            del(i){
                this.goods.splice(i,1)
            }
        },
    })
    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Documentation 代码注释文档规范

1. 代码注释文档规范的添加 /// 代码规范文档 struct DocumentationBootcamp: View {// MARK: PROPERTIESState var data:[String] ["Apples", "Oranges", "Bananas"]State var showAlert: Bool false// MARK: BODY// Code Folding : 代码折叠…

Spring Boot原理分析(二):IoC

文章目录 〇、IoC思想和IoC容器IoC体现了什么思想什么是IoC容器 一、Spring IoC容器的继承层次1.BeanFactory2.ListableBeanFactory3.HierarchicalBeanFactory4.ApplicationContext5.常用的ApplicationContext的实现类ClassPathXmlApplicationContext&#xff08;基于XML配置&a…

FreeRTOS详细目录结构和作用

FreeRTOS各个目录的功能简介 1. Demo目录&#xff1a;这个目录下主要包含了大量官方支持的微控制器和不同平台上的项目&#xff0c;包括常用的stm32和keil平台下进行开发的项目。我主要使用的是CORTEX_STM32F103_Keil和common两个目录&#xff0c;对系统进行精简的话可以只保留…

光伏行业中的设备自动化系统EAP:优化生产流程的重要工具

随着清洁能源的需求不断增长&#xff0c;光伏行业作为可再生能源的重要组成部分&#xff0c;正迅速发展。为了满足日益增长的市场需求&#xff0c;光伏企业需要提高生产效率、降低成本&#xff0c;并保证产品的质量和可靠性。 图.光伏面板&#xff08;pexels&#xff09; 在这…

校园跑腿小程序怎么做

校园跑腿小程序是为了方便学生在校园内解决各类需求而设计的一款应用程序。该小程序具有多种功能&#xff0c;包括校园跑腿、二手市场、骑手接单、校园表白墙、下单支付、学校代理以及佣金抽成等。 1. 校园跑腿&#xff1a; 该小程序提供校园内的跑腿服务&#xff0c;学生可以…

【开源项目】中后台开发框架vue-admin-work-pro

vue-admin-work-pro 基本介绍 基于Vue3、Vite、TypeScript、NaiveUI、Vuex等最新技术栈开发的开箱即用的中后台前端框架。 内置常用模板&#xff0c;无需考虑交互排版&#xff0c;助你高效开发样式美观大方&#xff0c;无缝对接 Naive Ui&#xff0c;随意组合页面&#xff0c…

ME GO小车

ME GO小车 ⚫ 体积小巧 ⚫ 集成多种传感器和执行器 ⚫ Mixly图形化编程 避障检测、自动巡线、灯光显示、 声音报警、自动测距、物联遥控等 ME GO小车——俯视图 ME GO小车——车底 ME GO CE 以上选自芯”向未来 元控智联挑战赛&#xff08;小学组&#xff09;赛事介绍资料二…

操作系统Linux—day03

操作命令 搜索文件 find命令 1按照文件名称搜索 语法&#xff1a;find [路径] -name “文件名 ” -print 打印出所有查找文件名的路径 2按照更新时间搜索 语法&#xff1a; find [路径] -mtime 3 -print 查找更改时间为3天前的文件&#xff0c;3表示3天前&#xff0c;-3…

python 第三方包安装

1 MAC 打开终端 ,证明安装上python了 2 直接输入 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark 其中 python3. 多的版本 需要 pip3 也可以直接用 pip 试一试 -i https://pypi.tuna.tsinghua.edu.cn/simple : 为 国内镜像地址 pyspark 第三方包

苹果pencil和普通的有什么区别?ipad第三方电容笔推荐

苹果原装电容笔和那种只具备倾斜压感的平替电容笔不一样&#xff0c;平替电容笔并没有具备重力压感。但是&#xff0c;如果你并不经常需要绘画的话&#xff0c;那么你也不必花费太多的金钱来购买一支价格如此贵的苹果电容笔&#xff0c;选择一款平替电容笔即可。在这里&#xf…

c++11 标准模板(STL)(std::basic_istream)(六)

定义于头文件 <istream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式…

阿里云容蓓:DCDN 助力云原生时代的应用构建及最佳实践

在数字化转型速度不断提升的今天&#xff0c;大带宽、低时延、高并发的场景不断涌现&#xff0c;内容分发网络(Content Delivery Network&#xff0c;CDN)应用需求还在不断攀升&#xff0c;打造更高质量的CDN服务将成为新时代产业竞争的关键所在。亚太CDN峰会自2012年第一届以来…

python_day7_画图

json数据与python字典的相互转换 import json列表&#xff0c;其中每个元素均为一个字典 data [{"name": "张三", "age": 10},{"name": "李四", "age": 13},{"name": "jay", "age&qu…

【论文阅读】Scaling Laws for Neural Language Models

前言 本文简要介绍 Scaling law 的主要结论原文地址&#xff1a;Scaling Laws for Neural Language Models个人认为不需要特别关注公式内各种符号的具体数值&#xff0c;而更应该关注不同因素之间的关系&#xff0c;比例等 Summary Performance depends strongly on scale, w…

windows安装netcat

netcat 就是 nc netcat官网&#xff1a;https://eternallybored.org/misc/netcat/ 将下载的netcat解压到C:\Program Files重命名为netcat &#xff08;安装位置自定义&#xff09; 配置一下环境变量&#xff0c;让nc命令可以在任何地方使用 在系统变量中加入netcat的启动路径 …

【面试题37】优化MYSQL数据库的方法有哪些

文章目录 一、前言二、优化的方向2.1 数据库设计优化2.2 查询优化2.3 硬件优化2.4 配置优化2.5. 定期维护和监控 三、MySQL查询优化的一些方向3.1 使用索引3.2 优化查询语句3.3 避免使用SELECT *3.4 分析查询计划3.5 设置合适的缓存大小3.6 分区表3.7 使用连接池3.8 定期优化数…

记录一组excel函数-将同一个id的多组数据整合到一格并用逗号隔开

初始数据如上图&#xff0c;用函数整理成下图 主要涉及两点&#xff1a;去重和集合 1.去重&#xff1a; 方法1: UNIQUE函数 使用方法&#xff1a;输入函数UNIQUE&#xff08;范围1:范围2&#xff09; 方法2:数据->删除重复项 使用方法&#xff1a;选中需要删除重复项的列&a…

Android :Activity生命周期

MainActivity .java import android.app.Activity; import android.os.Bundle; import android.util.Log; import java.util.function.LongToDoubleFunction; public class MainActivity extends Activity { //日志标记 private String TAG this.getClass().getSimpleNa…

Jenkins持续集成:使用Gerrit Trigger插件实现代码提交自动验证

Gerrit Trigger插件集成了Gerrit代码审查&#xff0c;当创建一个“patch set”时触发Jenkins构建&#xff0c;本文档介绍Gerrit Trigger插件配置及使用方法。 目录 安装Gerrit Trigger插件Gerrit 访问权限配置Jenkins Gerrit Server配置Gerrit Trigger配置 安装Gerrit Trigger插…

深入理解Linux网络——本机网络IO

文章目录 一、相关实际问题二、跨机网络通信过程1&#xff09;跨机数据发送2&#xff09;跨机数据接收3&#xff09;跨机网络通信汇总 三、本机发送过程1&#xff09;网络层路由2&#xff09;网络设备子系统3&#xff09;驱动程序 四、本机接收过程五、问题解答 系列文章&#…