【uniapp 小程序开发语法篇】资源引入 | 语法介绍 | UTS 语法支持(链接格式)

news2024/10/7 20:28:49

在这里插入图片描述

博主:_LJaXi Or 東方幻想郷
专栏: uni-app | 小程序开发
开发工具:HBuilderX

小程序开发语法篇

  • 引用组件
    • easycom
  • Js文件引入
    • NPM支持
  • Css文件引入
  • 静态资源引入
    • css 引入静态资源
    • 如何引入字体图标?
    • css 引入字体图标示例
      • nvue 引入字体图标注意事项
  • Vue2 语法简介绍
    • 引入js文件 以及 高级用法
    • App.vue 全局样式
    • 组件
    • 全局注册
    • 组件互传
  • Vue2 项目转 Vue3 项目
  • ts/TypeScript支持
    • 基本用法
    • 修改 Typescript 配置
    • ts组件问题
  • JSX/TSX 支持
    • 安装插件
    • 配置 vite.config.js
  • UTS 语言

引用组件

传统vue项目开发,引用组件需要导入 - 注册 - 使用三个步骤,如下:

<template>
	<view>
		<!-- 3.使用组件 -->
		<uni-rate text="1"></uni-rate>
	</view>
</template>
<script>
	// 1. 导入组件
	import uniRate from '@/components/uni-rate/uni-rate.vue';
	export default {
		components: { uniRate } // 2. 注册组件
	}
</script>

Vue 3.x增加了script setup特性,将三步优化为两步,无需注册步骤,更为简洁:

<template>
	<view>
		<!-- 2.使用组件 -->
		<uni-rate text="1"></uni-rate>
	</view>
</template>
<script setup>
	// 1. 导入组件
	import uniRate from '@/components/uni-rate/uni-rate.vue';
</script>

uni-appeasycom机制,将组件引用进一步优化,开发者只管使用,无需考虑导入和注册,更为高效:

<template>
	<view>
		<!-- 1.使用组件 -->
		<uni-rate text="1"></uni-rate>
	</view>
</template>
<script>
</script>

在 uni-app 项目中,页面引用组件和组件引用组件的方式都是一样的(可以理解为:页面是一种特殊的组件),均支持通过 easycom 方式直接引用。

easycom 规范详细介绍,参考:easycom

easycom

HBuilderX 2.5.5 起支持 easycom 组件模式

传统 vue 组件,需要安装、引用、注册,三个步骤后才能使用组件

easycom将其精简为一步。 只要组件安装在项目根目录或uni_modulescomponents目录下,并符合components/组件名称/组件名称.vueuni_modules/插件ID/components/组件名称/组件名称.vue目录结构,就可以不用引用、注册,直接在页面中使用

<template>
	<view class="container">
		<uni-list>
			<uni-list-item title="第一行"></uni-list-item>
			<uni-list-item title="第二行"></uni-list-item>
		</uni-list>
	</view>
</template>
<script>
	// 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用
	export default {
		data() {
			return {

			}
		}
	}
</script>

不管components目录下安装了多少组件,easycom打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。

组件库批量安装,随意使用,自动按需打包。以官方的uni-ui为例,在HBuilderX新建项目界面选择uni-ui项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。

在uni-app插件市场下载符合components/组件名称/组件名称.vue目录结构的组件,均可直接使用。

easycom是自动开启的,不需要手动开启,有需求时可以在pages.jsoneasycom节点进行个性化设置,如关闭自动扫描,或自定义扫描匹配组件的策略。设置参数如下:

属性类型默认值描述
autoscanBooleantrue是否开启自动扫描,开启后将会自动扫描符合components/组件名称/组件名称.vue目录结构的组件
customObject-以正则方式自定义组件匹配规则。如果autoscan不能满足需求,可以使用custom自定义匹配规则

自定义easycom配置的示例

如果需要匹配 node_modules 内的 vue 文件,需要使用packageName/path/to/vue-file-$1.vue形式的匹配规则,其中packageName为安装的包名,/path/to/vue-file-$1.vuevue 文件在包内的路径。

"easycom": {
  "autoscan": true,
  "custom": {
    "^uni-(.*)": "@/components/uni-$1.vue", // 匹配components目录内的vue文件
    "^vue-file-(.*)": "packageName/path/to/vue-file-$1.vue" // 匹配node_modules内的vue文件
  }
}

说明

  • easycom方式引入的组件无需在页面内import,也不需要在components内声明,即可在任意页面使用
  • easycom方式引入组件不是全局引入,而是局部引入。例如在H5端只有加载相应页面才会加载使用的组件
  • 在组件名完全一致的情况下,easycom引入的优先级低于手动引入(区分连字符形式与驼峰形式)
  • 考虑到编译速度,直接在pages.json内修改easycom不会触发重新编译,需要改动页面内容触发。
  • easycom只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。但vue组件也可以全端运行,包括小程序和app-nvue。可以参考uni ui,使用vue后缀,同时兼容nvue页面。
  • nvue页面里引用.vue后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持easycom

Js文件引入

js文件或script标签内(包括 renderjs 等)引入js文件时,可以使用相对路径和绝对路径,形式如下

// 绝对路径,@指向项目根目录,在cli项目中@指向src目录
import add from '@/common/add.js';
// 相对路径
import add from '../../common/add.js';

注意

  • js 文件不支持使用/开头的方式引入

NPM支持

uni-app支持使用npm安装第三方包。

此文档要求开发者们对npm有一定的了解,因此不会再去介绍npm的基本功能。如若之前未接触过npm,请翻阅NPM官方文档进行学习。

初始化npm工程

若项目之前未使用npm管理依赖(项目根目录下无package.json文件),先在项目根目录执行命令初始化npm工程:

npm init -y

cli项目默认已经有package.json了。HBuilderX创建的项目默认没有,需要通过初始化命令来创建。

安装依赖

在项目根目录执行命令安装npm包:

npm install packageName --save

使用

安装完即可使用npm包,js中引入npm包:

import package from 'packageName'
const package = require('packageName')

注意

  • 为多端兼容考虑,建议优先从 uni-app插件市场 获取插件。直接从 npm 下载库很容易只兼容H5端。
  • 非 H5 端不支持使用含有 dom、window 等操作的 vue 组件和 js 模块,安装的模块及其依赖的模块使用的 API 必须是 uni-app 已有的 API(兼容小程序 API),比如:支持高德地图微信小程序 SDK。类似jQuery 等库只能用于H5端。
  • node_modules 目录必须在项目根目录下。不管是cli项目还是HBuilderX创建的项目。
  • 关于ui库的获取,详见多端UI库

Css文件引入

使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束

示例代码:

<style>
    @import "../../common/uni.css";

    .uni-card {
        box-shadow: none;
    }
</style>

静态资源引入

template内引入静态资源,如imagevideo等标签的src属性时,可以使用相对路径或者绝对路径,形式如下

<!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 -->
<image class="logo" src="/static/logo.png"></image>
<image class="logo" src="@/static/logo.png"></image>
<!-- 相对路径 -->
<image class="logo" src="../../static/logo.png"></image>

注意

  • @开头的绝对路径以及相对路径会经过 base64 转换规则校验
  • 引入的静态资源在非 h5 平台,均不转为 base64。
  • H5 平台,小于 4kb 的资源会被转换成 base64,其余不转。
  • HBuilderX 2.6.6template内支持@开头路径引入静态资源,旧版本不支持此方式
  • App 平台自HBuilderX 2.6.9template节点中引用静态资源文件时(如:图片),调整查找策略为【基于当前文件的路径搜索】,与其他平台保持一致
  • 支付宝小程序组件内 image 标签不可使用相对路径

css 引入静态资源

css文件或style标签内引入css文件时(scss、less 文件同理),可以使用相对路径或绝对路径(HBuilderX 2.6.6

/* 绝对路径 */
@import url('/common/uni.css');
@import url('@/common/uni.css');
/* 相对路径 */
@import url('../../common/uni.css');

注意

  • HBuilderX 2.6.6起支持绝对路径引入静态资源,旧版本不支持此方式

css文件或style标签内引用的图片路径可以使用相对路径也可以使用绝对路径,需要注意的是,有些小程序端 css 文件不允许引用本地文件(请看注意事项)。

/* 绝对路径 */
background-image: url(/static/logo.png);
background-image: url(@/static/logo.png);
/* 相对路径 */
background-image: url(../../static/logo.png);

Tips

  • 引入字体图标请参考,字体图标
  • @开头的绝对路径以及相对路径会经过 base64 转换规则校验
  • 不支持本地图片的平台,小于 40kb,一定会转 base64。(共四个平台 mp-weixin, mp-qq, mp-toutiao, app v2)
  • h5 平台,小于 4kb 会转 base64,超出 4kb 时不转。
  • 其余平台不会转 base64

如何引入字体图标?

uni-app 支持使用字体图标,使用方式与普通 web 项目相同,需要注意以下几点

  • 支持 base64 格式字体图标。
  • 支持网络路径字体图标。
  • 小程序不支持在 css 中使用本地文件,包括本地的背景图和字体文件。需以 base64 方式方可使用。
  • 网络路径必须加协议头 https
  • 从 http://www.iconfont.cn 上拷贝的代码,默认是没加协议头的。
  • 从 http://www.iconfont.cn 上下载的字体文件,都是同名字体(字体名都叫 iconfont,安装字体文件时可以看到),在 nvue 内使用时需要注意,此字体名重复可能会显示不正常,可以使用工具修改。
  • 使用本地路径图标字体需注意:
    1. 为方便开发者,在字体文件小于 40kb 时,uni-app 会自动将其转化为 base64 格式;
    2. 字体文件大于等于 40kb,仍转换为 base64 方式使用的话可能有性能问题,如开发者必须使用,则需自己将其转换为 base64 格式使用,或将其挪到服务器上,从网络地址引用;
    3. 字体文件的引用路径推荐使用以 ~@ 开头的绝对路径
@font-face {
	font-family: test1-icon;
	src: url('~@/static/iconfont.ttf');
}

css 引入字体图标示例

<template>
	<view>
		<view>
			<text class="test">&#xe600;</text>
			<text class="test">&#xe687;</text>
			<text class="test">&#xe60b;</text>
		</view>
	</view>
</template>
<style>
@font-face {
	font-family: 'iconfont';
	src: url('https://at.alicdn.com/t/font_865816_17gjspmmrkti.ttf') format('truetype');
}
.test {
	font-family: iconfont;
	margin-left: 20rpx;
}
</style>

nvue 引入字体图标注意事项

nvue中不可直接使用 css 的方式引入字体文件,需要使用以下方式在 js 内引入。nvue 内不支持本地路径引入字体,请使用网络链接或者base64形式。src字段的url的括号内一定要使用单引号

var domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
	fontFamily: 'fontFamilyName',
	src: "url('https://...')",
});

Vue2 语法简介绍

引入js文件 以及 高级用法

以前通过script src、link href引入外部的js和css

<script src="js/jquery-1.10.2.js" type="text/javascript"></script>  
<link href="css/bootstrap.css" rel="stylesheet" type="text/css"/>

现在使用 Es6 语法的 import 引入外部的 js模块或css,只要 require 进来,就会变为对象

在hello uni-app的 common 目录有一个工具类 util.js ,可以在hello uni-app中搜索这个例子查看。hello uni-app示例代码可从 github 获取

<script>  
	var util = require('../../../common/util.js');  //require这个js模块  
	var formatedPlayTime = util.formatTime(playTime); //调用js模块的方法  
</script>
function formatTime(time) {  
	return time;//这里没写逻辑  
}  
module.exports = {  
	formatTime: formatTime  
}

高级写法

// 直接使用js模块的属性。在hello uni-app有示例 
var dateUtils = require('../../../common/util.js').dateUtils; 
// 将js导入并重命名为echarts,然后使用echarts.来继续执行方法。在hello uni-app有示例 
import * as echarts from '/components/echarts/echarts.simple.min.js'; 

App.vue 全局样式

css外部文件导入全局样式,在根目录下的 app.vue 里写入,每个页面都会加载 app.vue 里的样式

<style>  
	@import "./common/uni.css";  
	.uni-hello-text{  
		color:#7A7E83;  
	}  
</style>

组件

按照 Vue 单文件组件规范,在 uni-app 下如下格式表示

<template>
	<view>
		<view>{{userName}}</view>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				"userName":"foo"
			}
		}
	}
</script>

全局注册

uni-app 支持配置全局组件,需在 main.js 里进行全局注册,注册后就可在所有页面里使用该组件

  1. main.js 里进行全局导入和注册
import Vue from 'vue'
import pageHead from './components/page-head.vue'
Vue.component('page-head',pageHead)
  1. index.vue 里可直接使用组件
<template>
	<view>
		<page-head></page-head>
	</view>
</template>

组件互传

可参考 Vue 组件互传

Vue2 项目转 Vue3 项目

参考:Vue2 转 Vue3

ts/TypeScript支持

uni-app 支持使用 ts 开发

基本用法

  • HBuilderX创建的项目

在 vue 页面的 script 节点,添加属性 lang="ts"

<script lang="ts">
// 这里编写ts代码
	let s:string = "123"
	console.log(s)
</script>
  • cli创建的项目

需要在创建项目时就指定ts,具体请另行参考文档

修改 Typescript 配置

在根目录创建 tsconfig.json 文件,并进行个性化配置,推荐配置如下

// tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "sourceMap": true,
    "skipLibCheck": true,
    "importHelpers": true,
    "allowSyntheticDefaultImports": true,
    "useDefineForClassFields": true,
    "resolveJsonModule": true,
    "lib": [
      "esnext",
      "dom"
    ],
    "types": [
      "@dcloudio/types"
    ]
  },
  "exclude": [
    "node_modules",
    "unpackage",
    "src/**/*.nvue"
  ]
}

个性化配置是可选的,没有tsconfig.json时会自动使用默认配置运行

ts组件问题

当指定 lang="ts" 后,该 vue 文件引入的所有组件都必须使用 ts 语言进行编写

示例代码

改造 uni-badge.vue

<script lang="ts">
    // 仅展示需要修改的核心代码,完整代码请参考原来的组件。
	import Vue from 'vue';
	export default Vue.extend({
		props: {
			type: {
				type: String,
				default: 'default'
			},
			inverted: {
				type: Boolean,
				default: false
			},
			text: {
				type: [String, Number],
				default: ''
			},
			size: {
				type: String,
				default: 'normal'
			}
		},
		computed: {
			setClass(): string {
				const classList: string[] = ['uni-badge-' + this.type, 'uni-badge-size-' + this.size];
				if (this.inverted === true) {
					classList.push('uni-badge-inverted')
				}
				return classList.join(" ")
			}
		},
		methods: {
			onClick() {
				this.$emit('click')
			}
		}
	})
</script>

在 index.vue 中引用 uni-badge 组件

<script lang="ts">
	import Vue from 'vue';
	import uniBadge from '../../components/uni-badge.vue';
	export default Vue.extend({
		data() {
			return {
				title: 'Hello'
			}
		},
		components:{
			uniBadge
		}
	});
</script>

JSX/TSX 支持

安装插件

npm install @vitejs/plugin-vue-jsx --save-dev

配置 vite.config.js

项目根目录新增 vite.config.js 文件,并增加如下配置

import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig({
  plugins: [
    uni(),
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    })
  ],
});
  • cli创建的项目

项目根目录 vite.config.js 文件中增加如下配置

import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig({
  plugins: [
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    }),
  ],
}

UTS 语言

可前往此页面进行 uts 系统学习: uts 语言

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

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

相关文章

深入解析微店详情API:提升电商平台的技术实力

了解微店详情API的基本概念和功能&#xff1a; 微店详情API是用于通过商品ID获取商品详情数据的接口。它提供了丰富的商品信息&#xff0c;包括商品名称、价格、描述、规格、图片等。我们将介绍API的请求和响应结构&#xff0c;以及常见的参数和返回字段。 最佳实践&#xff1…

低版本Qt Creator安装方式

文章目录 一. 说明二.安装方法 一. 说明 安装最新的QT后自带的Qt Creator再打开的时候会很慢&#xff0c;并且打开项目后点击代码文件切换速度也会很慢&#xff0c;安装低版本的Qt Creator未出现这个问题&#xff0c;故选择安装低版本Qt Creator 二.安装方法 下载低版本Qt C…

中断子系统--硬件层(GICv3)

目录 综述 硬件层--GICV3 中断类型 中断状态 Distributor组件 中断使能配置 中断触发方式配置 中断优先级配置  中断分组标记 GIC处理中断流程 综述 由上面的block图&#xff0c;我们可知linux kernel的中断子系统分成4个部分&#xff1a; 硬件层&#xff1a;最下层…

学习总结(TAT)

好久都没交总结了&#xff0c;今天把之前的思路和错误整理了一下&#xff1a; 在服务器和客户端两侧&#xff0c;不可以同时先初始化获取输入流&#xff0c;否则会造成堵塞&#xff0c;同时为这位作者大大打call&#xff1a; (3条消息) 关于Java Socket和创建输入输出流的几点…

龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构

根据8月8日Phoronix报道&#xff0c;龙芯正在积极研发龙芯二进制翻译功能&#xff08;Loongson Binary Translationm&#xff0c;LBT&#xff09;以提高LoongArch架构与其他处理器&#xff08;如MIPS/x86/Arm&#xff09;的二进制翻译能力&#xff0c;这重要举措将显著提升龙芯…

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址

本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理&#xff0c;利用随机数作为蓝牙mesh地址&#xff0c;蓝牙mesh采用自组网 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#…

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例,作为操作截图: 镜像构建目录说明 pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保…

45.杜芬方程解仿真解曲线(matlab程序)

1.简述 Dufing方程是一种重要的动力系统山&#xff0c;是反映工程物理系统中非线性现象和混沌动力学行为的极其重要的方程式。通过Duffing方程可以探讨铁磁谐振电路中的分岔、拟周期运动、子谐波振荡。而在非线性与混沌系统的研究中&#xff0c;Duffing方程展示了丰富的混沌动力…

12.操作符详解(位操作符、逗号表达式、下标访问操作符、函数调用操作符、操作数的优先级)

这里写目录标题 1.位操作符1.1左移操作符&#xff08;<<&#xff09;1.2右移操作符&#xff08;>>&#xff09;1.3按位与操作符&#xff08;&&#xff09;1.4按位或操作符&#xff08;|&#xff09;1.5异或操作符&#xff08;^&#xff09;1.6取反操作符&#…

SPF9139全力适配ios16与鸿蒙3.0,超实用数据提取、分析、恢复能力UP!

​ 如今&#xff0c;群聊已成为人们必不可少的沟通窗口 家人群&#xff0c;好友群&#xff0c;班级群 粉丝群&#xff0c;交友群&#xff0c;工作群 …… 各类群聊铺天盖地般涌来的同时 也有一些群聊沦为了 赌博、传播淫秽视频、发表不当言论 等违法犯罪行为滋生之地 与…

滑动窗口——缓冲区大小

文章目录 作用处理过程三次握手四次挥手的全部流程 窗口理解为缓冲区的大小&#xff0c;滑动窗口的大小会随着发送数据和接收数据而变化。 通信双方都有发送缓冲区和接收缓冲区。 服务器&#xff1a; 发送缓冲区 接收缓冲区 客户端&#xff1a; 发送缓冲区 接收缓冲区 作用 处…

C++项目,出现debug能正常编译release编译报错的情况

编写了一个DLL库文件&#xff0c;发现可以正常编译生成debug的库&#xff0c;但是release的部分编译报错。列举过程中出现的错误解决办法&#xff1a; 1.报错点&#xff1a;fatal error C1189: #error: Building MFC application with /MD[d] … fatal error C1189: #error: B…

前端进阶html+css04----盒子模型

1.一个盒子由content&#xff08;文本内容)&#xff0c;padding,border,margin组成。 2.盒子的大小指的是盒子的宽度和高度。一般由box-sizing属性来控制。 1&#xff09;默认情况下, 也就是box-sizing: content-box时&#xff0c;盒子的宽高计算公式如下&#xff1a; 盒子宽…

使用 Splashtop Secure Workspace 改进安全访问

前言&#xff1a;Splashtop 首席执行官兼联合创始人 Mark Lee 我们在十多年前推出 Splashtop 远程访问和支持产品线时&#xff0c;专注于为用户提供高性能和卓越的用户体验&#xff0c;以便用户能够随处访问计算资源。如今&#xff0c;我们有25万企业客户和3000万个人用户&…

如何使用Java发邮件

首先要知道一点&#xff0c;发送邮件不需要像发送短信那样购买具体的定制化服务&#xff0c;可以理解为发送短信是一个涉及到具体的物理设备&#xff0c;比如基站等这些东西&#xff0c;而邮件的服务成本没有那么高&#xff0c;它是一个比较纯粹的软件服务。 其次你要知道那个…

Stable Diffusion教程(9) - AI视频转动漫

配套抖音视频教程&#xff1a;https://v.douyin.com/UfTcrcJ/ 安装mov2mov插件 打开webui点击扩展->从网址安装输入地址&#xff0c;然后点击安装 https://github.com/Scholar01/sd-webui-mov2mov 最后重启webui 下载模型 从国内liblib AI 模型站下载模型 LiblibAI哩…

从到店到到家,本土便利店正在围猎外资三巨头

全家在中国市场接连关店约300多家&#xff0c;7-11关闭或迁移全球市场的门店约1000家&#xff0c;罗森深圳公司2022年疑似亏损近8000万。 近三年来&#xff0c;以全家、7-11和罗森三家为代表的外资便利店企业&#xff0c;正在遭遇中国本土便利店品牌从到店到家的双重围猎。 20…

分析一下vue3下会造成响应式丢失的情况

前言 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代的步伐&#…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

SDUT 2023 summer team contest(for 22) - 13

B - Hoppers 题意&#xff1a;给你一张无向图&#xff0c;可以选定一个点染色&#xff0c;随后距离为2的点都会被染色(可以传染&#xff09;。求至少需要向图中添加几条边使得选定一个点染色后可以将整个图染色。(不一定是连通图&#xff09; 思路&#xff1a;如果一个连通块是…