vue3.0 新的api属性

2023-11-15

vue3.0 只需要升级vuecli4.0以上的版本就可以选择性的安装了

 

 

获取路由对象

import { useRouter } from 'vue-router'
const router=useRouter()
router.push('/')
即可调用路由跳转等方法

获取vuex

import { useStore } from 'vuex'
const { state, commit } = useStore() 
可获取vuex的派发方法和数据

异步组件新方法

 

import { defineAsyncComponent } from 'vue'
component: defineAsyncComponent(() => import('../views/Home.vue')), //路由注册
components: {
    AsyncComponent: defineAsyncComponent(() =>
      import('./components/AsyncComponent.vue')
    )//本地组件组测
  }
const AsyncComp = defineAsyncComponent({
  // 需要异步加载的组件
  loader: () => import('./Foo.vue')
  // 正在加载时显示的组件 loding动画等
  loadingComponent: LoadingComponent,
  //组件加载失败显示的组件
  errorComponent: ErrorComponent,
  // 加载组件延迟多少秒
  delay: 200,
  // 加载时间超过了,则显示错误的组件
  // 默认无穷加载事件
  timeout: 3000,
  // 返回一个布尔值,当错误值不等于404则重新尝试加载
  retryWhen: error => error.code !== 404,
  // 允许的最大重试次数
  maxRetries: 3,
  // 定义组件是否可以被控制,如果被控制,他的加载状态和加载失败状态将由父组件控制
  suspensible: false
})

v-model新方式 可直接进行双向绑定 update:props

v-model:propName="bindingExpression"

<my-component v-model:foo.capitalize="myText"></my-component>

子组件
emit('update:foo',更新父组件的数据)

capitalize 自定义修饰符。用于在同步数据,对数据进行拦截过滤在发送给父组件
if (this.modelModifiers.capitalize) {
        value = value.charAt(0).toUpperCase() + value.slice(1)
}
emit('update:state', false)

 

teleport 窗口,不改变组件树的位置,但是改变渲染的地方,比如模态窗口,渲染位置可以定义在app以外的位置

子组件
<teleport to="#mode" v-show="state" disable='false'>
    <div class="mode">
      <slot name="modetest"> </slot>
      <button>关闭</button>
    </div>
  </teleport>
 disable是否被传送,false为被传送 
 
父组件使用后,虽然渲染的位置变化了,但是实际组件树没有变化,所有的传值,事件,组件之间的上下级关系没有发生变化 
注意to后面如果是id 则要用# 是一个选择器
在html里面可以添加一个新的#mode节点

**jsx使用方式
import { defineComponent, PropType, reactive, Teleport, toRefs } from 'vue'
<Teleport to='#tabbarModule'>
</Teleport>

 获取当前组件的实例,

import {getCurrentInstance} from 'vue'

const { proxy } = getCurrentInstance() 组件实例 生产下也一样可以使用

toRef

传递数据给消费函数,也就是hooks,传递数据但是要保证数据能和响应式数据发生关联

const state=reactive({
    loading:false
})
useScoll(toRef(state,'loading')) //传递单个参数给这个hooks使用,

//该函数在内部会对loading修改.toRef包装后的数据更改后会修改原本响应式数据,但是不会刷新视图,
//响应式数据被更改后会触发一次视图更新,所以这样不会进行两次视图刷新

 

Fragment


直接理解成react的空标签就行了
``jsx
import {Fragment} from 'vue'

return ()=>(
    <>
    </>
)


带来的attrs问题

//子 Toast组件
return ()=>(
    <>
        <div></div>
        <Loading />
    </>
)



//父使用 
<>
    <Toast style='color:red'/>
</>

style继承的问题,以往有根标签,直接继承给跟标签,现在是空标签,需要直接attrs在哪里


return ()=>(
    <>
        <div v-bind="$attrs"></div>
        <Loading />
    </>
)

//现在很多新的vue3 ui组件直接加style,就会报警,没设置根标签也没有attrs指定继承位置



ts方式 对于vue3.0建议ts写

vuex ts

模块home

export interface HomeStateInfo {
    name: string;
    skeletonLoading: boolean;
    skeletList: string[];
    list: number[];
    loading: {
        [key: string]: boolean;
    }
}
interface SetLoading {
    prop: string;
    status: boolean;
}
import { GlobalStateInfo } from '../index'

import { Module } from 'vuex'
export const HomeState: HomeStateInfo = {
    name: '',
    skeletonLoading: true,
    skeletList: ['/', '/index', 'home'],
    list: [1, 2, 3, 4, 5, 6],
    loading: {}
}

export const HomeModel: Module<HomeStateInfo, GlobalStateInfo> = {
    namespaced: true,//是否开启命名空间
    state: HomeState,
    mutations: {
        ['CHANE_NAME'](state, payload: string) {
            state.name = payload
        },
        ['changeSkeletonState'](state, payload: boolean) {
            state.skeletonLoading = payload
        },
        ['changeList'](state, payload: number[]) {
            state.list = payload
        },
        ['SET_LOADING_STATUS'](state, payload: SetLoading) {
            state.loading[payload.prop] = payload.status
        }
    },
    actions: {
        ['addLoad']: (injectee) => {
            const { state, commit } = injectee
            return new Promise((reslove) => {
                const newarr = [...state.list]
                for (let index = 0; index < state.list.length; index++) {
                    newarr.push(state.list[index] + 1)
                }
                setTimeout(() => {
                    reslove()
                    commit('changeSkeletonState', false)
                    commit('changeList', newarr)
                }, 3000)
            })
        }
    }
}



store/index 主仓库文件

import { createStore } from 'vuex'
import { HomeModel, HomeStateInfo } from './home/home'

export interface GlobalStateInfo {
  HomeModel: HomeStateInfo;//模块数据名称
}
export default createStore<GlobalStateInfo>({
  mutations: {

  },
  modules: {
    HomeModel
  }
})





vue文件引用

import { GlobalStateInfo } from "@/store/index";

setup
const store = useStore<GlobalStateInfo>();

onMounted
await store.dispatch("HomeModel/addLoad");

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3.0 新的api属性 的相关文章

  • mySQL (关系型数据库管理系统)

    MySQL是一个关系型数据库管理系统 由瑞典MySQL AB 公司开发 目前属于 Oracle 旗下产品 MySQL 是最流行的关系型数据库管理系统之一 在 WEB 应用方面 MySQL是最好的 RDBMS Relational Datab

随机推荐

  • 用C语言完整实现12种排序方法

    1 冒泡排序 思路 比较相邻的两个数字 如果前一个数字大 那么就交换两个数字 直到有序 时间复杂度 O n 2 稳定性 这是一种稳定的算法 代码实现 void bubble sort int arr size t len size t i
  • Spring Boot实现文件上传和下载

    实现Spring Boot文件上传和下载的步骤 1 文件上传 在pom xml文件中添加依赖 spring boot starter web和spring boot starter thymeleaf 创建一个上传前端的页面 包括一个表单来
  • 什么是住宅ip,静态和动态怎么选?

    上文我们介绍了数据中心代理 这次我们来介绍下住宅代理ip 住宅代理ip分类两种类型 静态住宅代理和动态住宅代理 他们有什么区别又能用在什么场景呢 我们先从他们是如何运作开始 一 什么是住宅代理ip isp住宅代理ip我们称为真人住宅代理 地
  • spring IOC流程图

    ioc核心 DefaultListableBeanFactory private final Map
  • 点云检测笔记2022

    目录 激光雷达综述 2022以前的点云检测 自动驾驶中的坐标系 Complex YOLOv4 激光雷达综述 百度安全验证
  • 记公司同事的一次集体活动

    花田游记 李维俊 杭州大区 风和日丽暖 春意现昂然 花田一日游 同事尽相伴 借着浓浓的春意在3月26日杭州大区组织到海上花田烧烤游玩 告别了城市的喧嚣 没有了工作的压力围绕在我们身边的只有体现同事之间紧密团队精神的欢声笑语 上午我们团队一行
  • Python优雅的日志——loguru

    loguru RECOMMENDATION 影视 loguru 据小提莫观察 在python的使用者中 善于聪明 偷懒 以及不重复造轮子已经成为大家的共识 正所谓 人生苦短 我用python 作为python的爱好者 肯定是喜欢python
  • 【分析】segments的version_map_memory指标具体表示什么?

    ES有很多的监控指标 其中有一些指标官方解释的实在模糊 比如version map memory byte units Total amount of memory used by all version maps across all s
  • JAVA 集合之迭代器Iterator

    Java语言中的Iterator功能比较简单 只能单向移动 它的主要功能有四种 1 凡是实现Collections接口的数据结构都可以使用该方法 第一次调用Iterator的next 方法时 它返回序列的第一个元素 2 使用next 获得序
  • 前哈工大教授开发的ChatALL火了!可同时提问17个聊天模型,ChatGPT/Bing/Bard/文心/讯飞都OK...

    丰色 发自 凹非寺量子位 公众号 QbitAI 今天的你 是否还在几个聊天大模型之间 反复横跳 毕竟各家训练数据和方法不尽相同 擅长和不擅长的东西也都不一样 现在 不用这么麻烦了 有人开发了一个名叫 ChatALL 的应用 可以将你的提问同
  • CTFShow Web7&Web8

    这两道题都是版本控制工具直接部署到生产环境中造成的信息泄露 所以在此一起总结 题目中给出了明显的提示 版本控制很重要 但不要部署到生产环境更重要 和备份文件泄露的题型一样 笔者自己的感觉是这种题型最常用的工具就是dirsearch 因此选择
  • C++类的默认成员函数 —— 析构函数

    一 概念 析构函数 与构造函数功能相反 析构函数不是完成对对象本身的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成对象中资源的清理工作 二 特征 析构函数是特殊的成员函数 其特征如下 1 析构函数名是在类名前
  • 物联网、区块链、元宇宙和虚拟数字人离普罗大众有多远?

    首先 我们最早理解的数字人就是数字虚拟的一个假人 可能看起来很像二次元玩偶的样子 今天我觉得数字人是一种虚拟的数字身份 无所谓你的形象是仿真或是任何形象 包括你在现实中无法实现的形象 你在梦想中所渴望的概念 无论它是什么样的 它是你在另外一
  • 微信小程序,计算时分秒时间差

    shijiancha function faultDate completeTime var stime Date parse new Date faultDate var etime Date parse new Date complet
  • r语言(总)(我命油我不油天)

    seq等间隔函数 seq from to by length out along with from to 为数值 表示开始和结束 by为数值 表示间隔 length out为数值 表示数列长度 along with为向量 表示数列长度与该
  • fabric基本概念

    Hyperledger fabric基本概念 首先fabric是由IBM贡献的超级账本框架 它是一个利用现有成熟的技术来组合而成的一个区块链技术的实现 它是一种允许可插拔实现各种功能的的模块化架构 它具有强大的容器技术 来承载各种主流语言来
  • C语言进阶——文件管理

    每当我们写好一段代码运行结束之后 再次运行的时候就会发现 之前在终端上输入的数据都会消失 那么如何把之前输入的数据保存下来呢 我们一般把数据持久化的方式有把数据存放在磁盘文件中 存放到数据库 打印等方式进行保存 使用文件我们可以直接将数据保
  • Mysql字符串处理函数详细介绍、总结

    1 ASCII str 返回字符的 ASCII 码值 返回值为字符串str 的最左字符 第一个字符 的数值 即取得最左字符的 ascii 码 假如str 为空字符串 则返回值为 0 假如 str 为 NULL 则返回值为 NULL ASCI
  • unity 不显示UI项,代码无法引用UI类

    如果在unity项目中遇到在Hierarchy面板右键发现没有ui这个选项 在vs里无法引用到UI类时可以进行以下操作 1 可以在unity的Project面板 选中Assets文件夹 右键选择 show in Explorer选项 开打资
  • vue3.0 新的api属性

    vue3 0 只需要升级vuecli4 0以上的版本就可以选择性的安装了 获取路由对象 import useRouter from vue router const router useRouter router push 即可调用路由跳转