vue3 vite等笔记
1.脚手架
vue-cli基于webpack封装,生态非常强大,可配置性也非常高,几乎能够满足前端工程化的所有要求。缺点就是配置复杂,甚至有公司有专门的webpack工程师专门做配置,另外就是webpack由于开发环境需要打包编译,开发体验实际上不如vite。
vite开发模式基于esbuild,打包使用的是rollup。急速的冷启动和无缝的hmr在开发模式下获得极大的体验提升。缺点就是该脚手架刚起步,生态上还不及webpack。
2.通过nvm切换node版本
3.vue3和vue2,reactdiff算法{
vue3采用头和头尾和尾比较,用最长递增子序列算法优化
vue2采用头和头尾和尾头和尾为何头比较
react采用从头到尾
}
4.ref全家桶
ref响应式数据对象
isRef判断
5.reactive全家桶
reactive:用来绑定复杂的数据类型
6.to系统全家桶
toref:响应式简单数据类型
torefs:复杂响应式类型
toraw:静态非响应式
7.watch
1.监听响应式简单数据类型
let sum = ref(0);
// 监视ref所定义的一个响应式数据
、
watch(sum, (newValue, oldValue) => {
console.log("sum ==> ", newValue, oldValue);
});
return {
sum,
};
2.监听复杂数据类型
let person = reactive({
name: "lisa",
age: 18,
job: {
joblist: {
money: 10,
},
},
});
watch(person,(newValue, oldValue) => {
console.log("person ==> ", newValue, oldValue);
},{immediate:true,deep:false}
//这里的deep配置不再奏效
);
return {
person,
};
3.监听响应式数据中某个属性
watch(()=>person.name,(newValue, oldValue) => {
console.log("person.name ==> ", newValue, oldValue);
});
return {
person,
};
8.watchEffect 高级监听器
1.停止监听清楚副作用
2. onInvalidate(()=>{ })清除副作用之后的回调
9.父子传参
接受值
defineProps<{
title:string,
data:number[]
}>()
子父传参
const list = reactive<number[]>([4, 5, 6])
const emit = defineEmits(['on-click'])
const clickTap = () => {
emit('on-click', list)
}
10.全局组件,局部组件
1.全局注册
// 引入全局组件
import GlobalComponent from "./components/GlobalComponent"
// 注册全局组件
app.component("GlobalComponent",GlobalComponent);
11。异步组件和代码分包优化配合Suspense
const B = defineAsyncComponent(() => import('./childCom/B.vue'))
12,依赖注入
爷爷组件给孙子组件传递数据
需要使用到vue提供的provide以及inject方法
其中,provide用来提供传递的数据,inject用来接收数据
13.兄弟之间传值
vue2 $emit $on ,eventbus
vue3 :
import mitts from 'mitt'
const mitt = mitts()
export default mitt
14.vue3 v-model
父组件
components: { CartTest },
setup() {
const count = ref(0);
return { count };
},
子组件
cart-test组件 计数器:{{ modelValue }}
<button @click="updateCount">+1
14.vue3全局变量
const app = createApp({});
app.config.globalProperties.$http = () => {};
15.vue3 ,样式穿透:deep()
16.pinia
1.安装
import {createPinia,PiniaVuePlugin} from 'pinia'
Vue.use(PiniaVuePlugin)
const pinia = createPinia()//需要挂载在实例上
new Vue({
render: h => h(App),
pinia
}).$mount('#app')
2.存储
新增store.js
import { defineStore } from "pinia" // 定义容器
export const useStore = defineStore('useStore', {
/**
- 存储全局状态
- 1.必须是箭头函数: 为了在服务器端渲染的时候避免交叉请求导致数据状态污染
- 和 TS 类型推导
*/
state: () => {
return {
count: 0,
}
},
/**
- 用来封装计算属性 有缓存功能 类似于computed
*/
getters: {
},
/**
- 编辑业务逻辑 类似于methods
*/
actions: {
increment(){
this.count++
}
}
})
3.实例化使用
import {mapState,mapActions} from 'pinia'
import { useStore } from "../store/index.js";
export default {
name: "HelloWorld",
data() {
return {
store: {},
};
},
props: {
msg: String,
},
methods: {
...mapActions(useStore,['increment']),
},
computed:{
...mapState(useStore,['count'])
}
16.移动端开发vhvw
1.npm install postcss-px-to-viewport -D
2.新建vite.config.ts
import { fileURLToPath, URL } from 'url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import postcsspxtoviewport from "postcss-px-to-viewport" //插件
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(), vueJsx()],
css: {
postcss: {
plugins: [
postcsspxtoviewport({
unitToConvert: 'px', // 要转化的单位
viewportWidth: 750, // UI设计稿的宽度
unitPrecision: 6, // 转换后的精度,即小数点位数
propList: [''], // 指定转换的css属性的单位,代表全部css属性的单位都进行转换
viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vw
fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vw
selectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,
minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
replace: true, // 是否转换后直接更换属性值
landscape: false // 是否处理横屏情况
})
]
}
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
3.引入声明文件 tsconfig.app postcss-px-to-viewport.d.ts跟vite.ts同级
{
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": ["env.d.ts", "src//*", "src//.vue", "postcss-px-to-viewport.d.ts"],
"exclude": ["src/**/tests/"],
"compilerOptions": {
"composite": true,
"baseUrl": ".",
"paths": {
"@/": ["./src/"]
}
}
}
1.vue3 router使用
1.安装引用
npm install vue-router@4
2.新建路由文件 router.js
import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router'
import login from '@/views/login/index.vue' // 自定义的 登录页
import LoginOut from '@/views/login/loginOut.vue' // 自定义的登出页
const routes: Array = [
{
path: '/',
name: 'Login',
component: login
},
{
path: '/LoginOut',
name: 'LoginOut',
component: LoginOut
}
]
/**
- 定义返回模块
*/
const router = createRouter({
history: createWebHistory('/abc/'), // 设置为history模式,就是路径里面没有#, createWebHashHistory 是默认的,括号里面的就是基础路径,可以理解为项目名称,就是请求路径的基础url
routes
})
export default router
3.main使用
import router from './router' // 引入router
createApp(App).use(router).use(Antd).mount('#app')
vue3 vite等笔记的更多相关文章
- Vue3+Vite引入Echarts5.0图表库
1 概述 环境Vue3+Vite,需要引入ECharts库. 2 尝试 目前ECharts已更新到5.0版本,在Vue中引入并不难,npm/cnpm安装后在需要的组件中引入: import echar ...
- vue3 + vite实现异步组件和路由懒加载
在 Vue2 中,异步组件和路由懒加载处理使用 import 就可以很轻松实现.但是在Vue 3.x 中异步组件的使用与 Vue 2.x 完全不同了.本文就详细讲讲vue3中异步组件和路由懒加载的实现 ...
- vue3 vite 系统标题 系统名称统一配置
想要统一配置系统名称 或者其他的,需要在vue3中使用 vite 的环境变量 vite 的环境变量 需要创建两个文件(和 vite.config.js 文件同一目录) .env.development ...
- 快速新建并配置一个eslint+prettier+husky+commitlint+vue3+vite+ts+pnpm的项目
前置准备 一台电脑 vscode pnpm vscode插件:ESLint v2.2.6及以上 vscode插件:Prettier - Code formatter v9.5.0及以上 vscode插 ...
- vue3的学习笔记:MVC、Vue3概要、模板、数据绑定、用Vue3 + element ui、react框架实现购物车案例
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.Vue是框架而jQuery则是库. 1.2.MVC(Mo ...
- vue3.0学习笔记(二)
一.选择合适的ide 推荐使用vs code编辑器,界面清晰.使用方便,控制台功能很好用.webstorm也可以,看个人喜好. 二.ui框架选择 目前,pc端一般是选择element ui(饿了么), ...
- vue3.0学习笔记(一)
一.搭建工作环境环境 1.从node.js官网下载相应版本进行安装即可 https://nodejs.org/zh-cn/download/,安装完成后在命令行输入 node -v 如果可以查询到版 ...
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...
- Vue3 Vite3 多环境配置 - 基于 vite 创建 vue3 全家桶项目(续篇)
在项目或产品的迭代过程中,通常会有多套环境,常见的有: dev:开发环境 sit:集成测试环境 uat:用户接收测试环境 pre:预生产环境 prod:生产环境 环境之间配置可能存在差异,如接口地址. ...
- 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率
无论是 vue2 全家桶还是 vue3 + vite + TypeScript,组件库的使用几乎大家都会,但自己开发一个独立组件库就不是每个人都掌握的,因为搭建组件库的基础开发环境,就会让很多同学望而 ...
随机推荐
- Locust fasthttplocust客户端环境搭建
1.下载地址:https://github.com/locustio/locust2.python setup.py install3.在执行目录中将安装完成的locust文件夹替换至原本pip下的原 ...
- idea等工具网盘下载地址
1.idea2020 下载地址:https://caiyun.139.com/m/i?1E5C2SkIZbJH4 ,下载密码微信 搜索 "白菜拼吧" 回复 idea2020 获取 ...
- 12组-Beta冲刺-2/5
一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15594989.html Github链接:https://github.com/ ...
- flutter 多种情况tabbar高度问题,普通使用和嵌套使用高度问题(Tab)。
众所周知tabbar的高度是不可改变的.比如我们普通的写一个tabbar. 先上效果图: 代码: Scaffold( appBar: AppBar( title: Text("TabBarD ...
- vue3 门户网站搭建5-图标
奈何 element 自带的图标太少,不够用,故打算使用 vite-plugin-svg-icons 组件来封装 svg-icon . ps: ui 框架选用的 element-ui,为了能跟 vue ...
- 修改python下载镜像源
找到pip.ini(可能在"C:\Users\Administrator\AppData\Roaming\pip\pip.ini")→记事本打开→添加相应源 如果没有找到,在C:\ ...
- (原创)odoo one2many字段以子列表形式显示
模块详情
- go语言学习教程
go语言学习教程 集合了连接go routine.go连接redis.go连接kafka等示例 https://github.com/fastbpmn/go-study TRANSLATE with ...
- IO学习笔记7
2.4 多路复用javaAPI 在上面我们简单java代码实现了多路复用,是一个单线程版的.讲上面的epoll代码复制到linux服务器中,使用strace追踪系统调用. javaAPI会根据系统类型 ...
- 【转载】VMWare 各版本下载地址【centos7安装gerrit】
https://blog.csdn.net/weixin_44129085/article/details/110443135 centos7安装gerrit https://blog.csdn.ne ...