Uniapp的学习

uniapp的内容和vue网页开发会有很多区别,但是都是基于vue开发的,大多数业务还是在vue打交道,但是这些uniapp的特殊的知识点也是要掌握好的。

基本配置

创建uniapp项目

npx degit dcloudio/uni-preset-vue#vite-ts 项目名 :用于创建一个uniapp项目

npm run dev:mp-weixin :用于给项目打包成微信小程序的打包格式,接着直接将dist中相应的包导入到相应的微信开发者工具里面即可。

加上ts类型校验:npm i -D @types/wechat-miniprogram @uni-helper/uni-app-types

ts类型校验

接着在tsconfig.json配置文件中配置好这个类型校验:

{
  "extends": "@vue/tsconfig/tsconfig.json",
  "compilerOptions": {
    "sourceMap": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },
    "lib": ["esnext", "dom"],
    "types": ["@dcloudio/types",
    "@types/wechat-miniprogram",//加上
  "@uni-helper/uni-app-types"]//加上
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

uni-ui的支持

安装uni-helper/uni-ui-types:

npm i -D @uni-helper/ui-types

再把@uni-helper/uni-ui-types加上以上的type配置项中去。

"types": [
      "@dcloudio/types",
      "@types/wechat-miniprogram",//加上
      "@uni-helper/uni-app-types",
      "@uni-helper/uni-ui-types"]//加上
    
    },

pinia配置

持久化配置:要先下载pinia持久化插件:

npm i pinia-plugin-persistedstate

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API。

store下的index.ts:

import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'

// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)

// 默认导出,给 main.ts 使用
export default pinia

// 模块统一导出
export * from './modules/member'

 main.ts:

import { createSSRApp } from "vue";
import App from "./App.vue";
import pinia from './stores'
export function createApp() {
  const app = createSSRApp(App);
  app.use(pinia)
  return {
    app,
  };
}

要多端配置持久化,要在相应的store的ts文件中,配置持久化规则:

小程序端配置持久化persist,要专门配置下getItem和setItem:(在defineStore中配置此参数)

// TODO: 持久化
    persist: {
      storage:{
        getItem(key){
          return uni.getStorageSync(key)
        },
        setItem(key,value){
          uni.setStorageSync(key,value)
        }
      }
    }

 封装promise请求函数和请求过滤器

import { useMemberStore } from "@/stores/modules/member"
import { BaseRequestUrl } from "./properties"
const baseURL = BaseRequestUrl

//添加拦截器
const httpInterceptor = {
    invoke(option:UniApp.RequestOptions){
        //非http开头的请求需要拼接地址
        if(!option.url.startsWith('http')){
            option.url = baseURL + option.url
        }
        //请求超时,默认是六十秒
        option.timeout = 30000
        console.log(option)
        //添加小程序请求头标识
        option.header = {
            ...option.header, //如果有原来的请求头,保留原来的请求头后再加上小程序请求头
            'source-client':'miniapp'
        }
        //添加token请求头标识
        const memberStore = useMemberStore()
        const token = memberStore.profile?.token
        if(token){
            option.header.Authorization = token
        }
    }
}
uni.addInterceptor('request',httpInterceptor)
uni.addInterceptor('uploadFile',httpInterceptor)

interface Data<T>{
    code:string,
    message:string,
    data:T
}

export const sendRequest = <T>(option:UniApp.RequestOptions) => {  //指定泛型,该泛型是有效数据的类型
    return new Promise<Data<T>>((resolve,reject) => {  
        uni.request({
            ...option,
            success(res){
                if(res.statusCode >= 200 && res.statusCode < 300){ //如果是2xx,说明是
                    resolve(res.data as Data<T>)  //后端响应过来的有效数据
                }else if(res.statusCode === 401){
                    // 401错误 -》 清理用户信息,跳转到登录页
                    const memberStore = useMemberStore()
                    memberStore.clearProfile()
                    uni.navigateTo({url:'/pages/login/login'})
                    reject(res)
                }else{
                    //其他错误 -》 根据后端错误信息轻提示
                    uni.showToast({
                        icon:'none',
                        title:(res.data as Data<T>).message || '请求错误'
                    })
                }
            },fail(err){ //响应失败,一般是网络问题
                uni.showToast({
                    icon:'none',
                    title:'网络错误'
                })
                reject(err)
            }
        })
    })
}

 其实就是小程序端使用uni.request来发送请求,自定义了一个promise,内部使用了uni.request函数,用于发送请求。uni.request返回的数据中,是属于后端返回的数据的是res中的data,所以要返回的就是res.data。Data接口是后端返回的数据类型的格式。token的信息也封装在其中,登录后获取token之后,token信息会储存在pinia中,每次发送请求的时候,token会自动被读取到请求头中。

baseUrl是服务器的url地址或者微服务网关的url地址。

关于pages.json

在uniapp中,每个页面都是要注册在pages.json文件中。

在pages.json中,配置页面的路由地址及窗口表现、默认窗口表现、tarbar

代码案例:

{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/index/index",//可以在此处修改一些小程序的页面信息
			"style": {
				"navigationBarTitleText": "首页"
			}
		},
		{
			"path" : "pages/my/my",
			"style" : 
			{
				"navigationBarTitleText" : "我的"
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#2ff8d0",
		"backgroundColor": "#F8F8F8"
	},
	"tabBar": {
		"selectedColor": "#2ff8d0",//tarbar选中的时候的文字的颜色指定
		"list": [
			{
				"pagePath": "pages/index/index",//tabar的路由
				"text": "首页",//tabar下方的文字
				"iconPath": "static/tabs/home_default.png",//tabar的图标
				"selectedIconPath": "static/tabs/home_selected.png"//tabar被选中的时图标
			},
			{
				"pagePath": "pages/my/my",
				"text": "我的",
				"iconPath": "static/tabs/user_default.png",
				"selectedIconPath": "static/tabs/user_selected.png"
			}
		]
	},
}

pages参数

pages参数是一个数组,数组中的元素就是一个一个的页面的信息,数组中的第一个元素代表的页面就是应用首页

path就是页面的路由地址,之后关于路由跳转页面的时候,都是使用这个配置的路由地址。

style是页面的一些窗口表现配置。style用于设置每个页面的状态栏、导航条、标题、窗口背景色等。在pages参数外还有一个参数叫globalStyle,用于配置全局窗口表现,每个页面的实际的窗口表现会先找style,如果没有的话再找globalStyle。

常见的样式如下:

属性类型默认值描述
navigationBarBackgroundColorHexColor#F8F8F8导航栏背景颜色(同状态栏背景色)
navigationBarTextStyleStringblack导航栏标题颜色及状态栏前景颜色,仅支持 black/white
navigationBarTitleTextString导航栏标题文字内容
navigationStyleStringdefault导航栏样式,仅支持 default/custom。custom即取消默认的原生导航栏
backgroundColorHexColor#ffffff窗口的背景色

至于具体的样式,见

pages.json 页面路由 | uni-app官网

tarbar

tarbar是用于配置一级导航栏,即底部的那个导航栏。

常用配置属性:

属性类型必填默认值描述
colorHexColortab 上的文字默认颜色
selectedColorHexColortab 上的文字选中时的颜色
backgroundColorHexColortab 的背景色
listArraytab 的列表,详见 list 属性说明,最少2个、最多5个 tab
positionStringbottom可选值 bottom、top,用于控制一级导航栏是显示在底部还是顶部

tarbar参数中的list数组,是一级导航栏里面的tab导航的信息的数组,tar导航的顺序和数组中的一致,tarbar最多配置五个tab,最少配置两个tab。

tab的配置属性:

属性类型必填说明
pagePathString页面路径,必须在 pages 中先定义
textStringtab 上按钮文字,在 App 和 H5 平台为非必填。例如中间可放一个没有文字的+号图标
iconPathString图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 position 为 top 时,此参数无效,不支持网络图片,不支持字体图标
selectedIconPathString选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 position 为 top 时,此参数无效
visibleBoolean该项是否显示,默认显示
iconfontObject字体图标,优先级高于 iconPath

 具体参数信息见官网文档:pages.json 页面路由 | uni-app官网

分包

pages.json中还可以进行分包配置,分包可以让一些页面和主要的页面分开下载,即进入程序的时候,会默认下载主包中的页面信息,而分包中的信息,在进入指定页面的时候,此分包才会开始下载页面信息,如此可以大大优化小程序的下载和启动速度。

分包中的页面不要放在src下的pages目录中,要自定义一个和pages目录同级的新目录,代表一个分包,将分包页面放在此分包的目录中。

例:若有个分包叫pagesMember,此分包下有两个页面:settings.vue,profile.vue

{
	//组件自动导入的规则
	"easycom": {
		//是否开启自动扫描
		"autoscan": true,
		//以正则的方式自定义组件匹配规则
		"custom": {
			// uni-ui 规则如下配置
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
		}
	},
	"pages": [
		//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/index/index",
			"style": {
				"navigationStyle": "custom", //隐藏默认导航栏
				"navigationBarTitleText": "首页"
			}
		},
		{
			"path": "pages/my/my",
			"style": {
				"navigationStyle": "custom",
				"navigationBarTextStyle": "white",
				"navigationBarTitleText": "我的"
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	// 设置 TabBar
	"tabBar": {
		"color": "#333",
		"selectedColor": "#27ba9b",
		"backgroundColor": "#fff",
		"borderStyle": "white",
		"list": [
			{
				"text": "首页",
				"pagePath": "pages/index/index",
				"iconPath": "static/tabs/home_default.png",
				"selectedIconPath": "static/tabs/home_selected.png"
			}
			{
				"text": "我的",
				"pagePath": "pages/my/my",
				"iconPath": "static/tabs/user_default.png",
				"selectedIconPath": "static/tabs/user_selected.png"
			}
		]
	},
	//分包信息配置
	"subPackages": [
		{
			"root": "pagesMember",
			"pages": [
				{
					"path": "settings/settings",
					"style": {
						"navigationBarTitleText": "设置"
					}
				},
				{
					"path": "profile/profile",
					"style": {
						"navigationStyle": "custom",
						"navigationBarTextStyle": "white",
						"navigationBarTitleText": "个人信息详情页面"
					}
				}
			]
		}
	],
	//分包预下载规则
	"preloadRule": {
		"pages/my/my": {
			"network": "all", 
			"packages": [
				"pagesMember"
			] 
		}
	}
}

subPackages中,root是此分包中页面的的根目录,也就是以上自定义的那个pagesMember目录。

preloadRule就是指定,进入了哪个页面的时候,会下载哪个分包。参数名就是触发下载的页面的路径,参数值中的network是代表在什么网络环境下下载分包,packages是指定要加载哪些分包。

具体使用见:pages.json 页面路由 | uni-app官网

常用api

api比较多,我列举几个我觉得看了有用的api。例如上传文件、选择媒体资源上传到服务器、页面路由跳转、弹出窗口提示等。

uni.uploadFile()

此方法用于将文件数据上传到服务器中,请求方式是post,其中 content-type 为 multipart/form-data

参数名类型必填说明
urlString开发者服务器 url
fileTypeString见平台差异说明文件类型,image/video/audio
fileFile要上传的文件对象。
filePathString是(files和filePath选其一)要上传文件资源的路径。
nameString文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
headerObjectHTTP 请求 Header, header 中不能设置 Referer。
timeoutNumber超时时间,单位 ms
formDataObjectHTTP 请求中其他额外的 form data
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

        uni.uploadFile({
			url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
			filePath: tempFilePaths[0],
			name: 'file',
			formData: {
				'userInfo': userinfo.value
			},
			success: (uploadFileRes) => {
				console.log(uploadFileRes.data);
			}
		});

其中一定要注意的是,formData参数的参数值会变成一个json字符串请求给后端,后端可以在controller的方法的参数列表上,添加一个String的参数,在其前面的@RequestParam注解中,加上指定在formData中设置的key的名称,这个参数上就会接受到指定的formData中的相应的参数信息。

@PostMapping(value="/upload")
    public ResultData<RoleContentPo> voiceMsgSend(@RequestParam("userInfo") String str, @RequestParam("file") MultipartFile file){
    UserInfo userInfo = JSONObject.parseObject(str,UserInfo.class);
    //其他操作
}

关于下载文件,没什么要特殊说明的,见文档:uni.uploadFile(OBJECT) | uni-app官网

uni.chooseMedia()

用于用户从自己的相册中选择图片或者启动拍照功能获取图片。

参数名类型默认值必填说明
countNumber9(注意:ios不可大于9)最多可以选择的文件个数
mediaTypeArray.<string>['image', 'video']文件类型
sourceTypeArray.<string>['album', 'camera']图片和视频选择的来源
maxDurationNumber10拍摄视频最长拍摄时间,单位秒。时间范围为 3s 至 30s 之间
sizeTypeArray.<string>['original', 'compressed']仅对 mediaType 为 image 时有效,是否压缩所选文件
cameraString'back'仅在 sourceType 为 camera 时生效,使用前置或后置摄像头
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

 代码案例:

uni.chooseMedia({
  count: 9,
  mediaType: ['image','video'],
  sourceType: ['album', 'camera'],
  maxDuration: 30,
  camera: 'back',
  success(res) {
    console.log(res.tempFiles)
  }
})

res.tempFiles是选择的图片/视频的临时文件的路径的数组,其中的元素就是一个个临时文件的路径。

路由跳转

uni.navigateTo()

保留原有页面,跳转到指定的页面。要跳转到原来的页面,使用uni.navigateBack()即可跳回原来的页面。

参数类型必填说明
urlString需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

uni.navigateTo({
	url: '/pages/login/login?id=1&name=uniapp'
});

路由路径后面带的参数可以被下个页面的onLoad函数的参数中获取,当然也会作为query参数传递。

uni.redirectTo()

和uni.navigate使用方法一致,区别是,uni.redirectTo()是关闭当前页面,跳转到指定页面,类似一个替换的效果。

uni.reLaunch()

使用也是和以上两个一致,区别是,它使用后,会关闭此前的所有的页面,跳转到指定页面

uni.switchTab()

以上的四个api都是只能用于打开非tab页面,要想打开tab页面,要使用uni.switchTab,使用方法和以上四个是一致的。只是页面路径要是tab页面。并且使用了该方法后会关闭所有的非tab页面。

uni.navigateBack()

用于回退到之前的页面。

参数类型必填默认值说明
deltaNumber1返回的页面数,如果 delta 大于现有页面数,则返回到首页。
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

 当然,更多的知识点和使用方法,在官网文档中才是最详细的,uniapp官网:uni-app官网

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SYN590RH是SYNOXO全新开发设计的一款宽电压范围,低功耗,高性能,无需外置AGC电容de单芯片ASK或00 K射频接收器

一般描述 SYN590RH是SYNOXO全新开发设计的一款宽电压范围&#xff0c;低功耗&#xff0c;高性能&#xff0c;无需外置AGC电容&#xff0c;灵敏度达到典型-110 dBm,400MHz~450MHz频率范围应用的单芯片ASK或00 K射频接收器。 SYN590RH是一款典型的即插即用型单片高…

Unreal5从入门到精通之如何在指定的显示器上运行UE程序

前言 我们有一个设备,是一个带双显示器的机柜,主显示器是一个小竖屏,可以触屏操作,大显示器是一个普通的横屏显示器。我们用这个机柜的原因就是可以摆脱鼠标和键盘,直接使用触屏操作,又可以在大屏观看,非常适合用于教学。 然后我们为这款机柜做了很多个VR项目,包括Uni…

C++中unordered_map和unordered_set的介绍以及用哈希表封装实现unordered_map和unordered_set

目录 1.unordered_map和unordered_set的使用 1.1unordered_set类的介绍 1.2unordered_set和set的使用差异 1.3unordered_map和map的使用差异 1.4unordered_multimap/unordered_multiset 2.用哈希表封装实现unordered_set和unordered_map 2.1实现出复用哈希表的框架并支持…

stm32学习4

学习目录 一.流水灯1.创建文件2.编写相关代码 一.流水灯 1.创建文件 将方法进行分类保存在不同的 .c 文件中&#xff0c;方便复用和寻找&#xff1b; 创建Hardware\LED文件&#xff0c;其中有led.c和led.h文件&#xff0c;用于存放有关LED灯操作的方法&#xff1b; 在User文…

JVM结构图

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;负责将Java字节码翻译成机器码并执行。JVM由多个子系统组成&#xff0c;包括类加载子系统、运行时数据区、执行引擎、Java本地接口和本地方法库。 类加载子系统&#xff08;Class Loading Subsy…

mysql之命令行基础指令

一&#xff1a;安装好mysql后&#xff0c;注册好账号密码。 二&#xff1a;在命令行进行登录的指令如下 mysql -u用户名 -p 例如&#xff1a;mysql -uroot -p; 然后按下回车&#xff0c;进入输入密码。 三&#xff1a;基本指令&#xff1a; 1&#xff1a;查看当前账户的所有…

LabVIEW适合开发的软件

LabVIEW作为一种图形化编程环境&#xff0c;主要用于测试、测量和控制系统的开发。以下是LabVIEW在不同应用场景中的适用性和优势。 一、测试与测量系统 LabVIEW在测试与测量系统中的应用广泛&#xff0c;是工程测试领域的主流工具之一。利用其强大的数据采集与处理功能&…

MySQL表的增删改查(CRUD3约束)

这次我们开始先不复习嗷&#xff0c;等到把数据表的删除说完咱们统一&#xff0c;总结书写 1.数据表的删除&#xff1a; 语法&#xff1a; 1. 使用 DROP TABLE 语句删除单个表 基本语法&#xff1a;DROP TABLE [IF EXISTS] table_name; table_name是要删除的表的名称。IF EXIS…

国内首位聋人 Android 软件工程师体验通义灵码,“这真是太棒了”

Hi 大家好&#xff01; 我就是人见人爱、Bug 闪开的通义灵码&#xff01; 上个月&#xff0c;我上线了一项新能力&#xff1a; 体验通义灵码 workspace&#xff1a;轻松分析项目结构&#xff0c;结合代码仓库理解工程、查询问答等 补充说明&#xff1a;当你需要快速了解一个工…

萌熊数据科技:剑指脑机转入,开启科技新篇章

近日&#xff0c;科技圈传来一则令人瞩目的消息&#xff0c;天津萌熊数据科技有限公司和天津一万年科技发展有限公司在全国范围内大力开展AI加生命科学的主体业务&#xff0c;并明确将朝着脑机转入方向深入发展&#xff0c;引发了行业内外的广泛关注。 天津萌熊数据科技有限公司…

OceanBase 安装使用详细说明

OceanBase 安装使用详细说明 一、系统环境要求二、安装OceanBase环境方案一:在线下载并安装all-in-one安装包方案二:离线安装all-in-one安装包安装前的准备工作三、配置OceanBase集群编辑配置文件部署和启动集群连接到集群集群状态和管理四、创建业务租户和数据库创建用户并赋…

MYSQL---TEST5(Trigger触发器Procedure存储过程综合练习)

触发器Trigger 数据库mydb16_trigger创建 表的创建 goods create table goods( gid char(8) primary key, #商品号 name varchar(10), #商品名 price decimal(8,2), #价格 num int&#xff1b;&#xff09; #数量orders create tabl…

MySQL 完整教程:从入门到精通

MySQL 完整教程&#xff1a;从入门到精通 MySQL 是一个广泛使用的关系型数据库管理系统&#xff0c;它使用结构化查询语言 (SQL) 来管理和操作数据。本文将详细介绍 MySQL 的基本概念、安装与配置、常用 SQL 语法、数据表的创建与管理、索引、视图、存储过程、触发器等高级特性…

winfrom控制应用程式不能双开

功能&#xff1a;控制winform应用程式不能双开 //应用程式不能双开bool isAppRunning false;Mutex mutex new Mutex(true, "MyApp", out isAppRunning);if (!isAppRunning){MessageBox.Show("程序已运行&#xff0c;不能再次打开&#xff01;");Environm…

uniapp:启动界面关闭时长控制

代码控制关闭启动界面 App启动后不会自动关闭启动界面&#xff0c;需要在代码中调用plus.navigator.closeSplashscreen关闭启动界面。"app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"autoclose" : false,}, }很多…

从数据提取到管理:TextIn平台的全面解析与产品体验

一、引言 在现代信息时代&#xff0c;文档解析和管理已经成为企业和开发者不可或缺的工具。TextIn是合合信息旗下的一款智能文档处理平台&#xff0c;为开发者和企业提供高效、精准的文档解析工具&#xff0c;帮助用户轻松应对各种复杂的文档处理需求。本文将深入探讨TextIn的…

Spring Boot技术在校园社团管理中的高效应用

3系统分析 3.1可行性分析 通过对本校园社团信息管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园社团信息管理系统采用SSM框架&#xff0c;JAVA作…

软件工程(软考高频)

一、软件工程概述 1.软件的基本生命周期 2.软件过程 二、软件开发方法 三、 软件开发模型 1.瀑布模型和V模型 2.原型模型和螺旋模型 3. 增量模型 4.喷泉模型 5.统一过程UP模型 6.敏捷方法 敏捷方法的开发模型 四、需求分析 1.基本概念 2.需求的分类 3.需求分析的工具 (1)数…

Spring整合Mybatis过程

配置文件 springConfig --> [jdbcConfig mybatisConfig] jdbc配置文件进行基本的数据库连接池配置 mybatis配置文件进行SqlSessionFactory Bean 和 MapperScannerConfigurer Bean的创建 在Spring容器启动时&#xff0c;系统会根据配置创建并初始化所有MyBatis所需的Bean…

ML2001-1 机器学习/深度学习 Introduction of Machine / Deep Learning

图片说明来自李宏毅老师视频的学习笔记&#xff0c;如有侵权&#xff0c;请通知下架 影片参考 【李宏毅】3.第一节 - (上) - 机器学习基本概念简介_哔哩哔哩_bilibili 1. 机器学习的概念与任务类型 概念&#xff1a;机器学习近似于寻找函数&#xff0c;用于处理不同类型的任…