环境搭建

  • 尤大开发了一个项目构建工具vite
 npm init vite-app <project-name>
cd <project-name>
npm install
npm run dev

创建实例

  • 之前是new Vue({})的形式来创建实例,vue3添加了一个新的方法--->creatApp
import {createApp} from 'vue'
const app =createApp({}) ////////////////////////
import {
createApp
} from 'vue'
import App from './App.vue'
const app = createApp(App)
app.mount('#app')
<template>
<!-- 可以有多个节点 -->
<h1>hello world</h1>
<h1>x:{{ position.x }} y:{{ position.y }}</h1>
</template> <script>
import { reactive } from 'vue';
// import HelloWorld from './components/HelloWorld.vue'; export default {
name: 'App',
// components: {
// HelloWorld
// },
setup() { //数据入口
let position = reactive({}); //构建响应式对象
window.addEventListener('mousemove', e => {
position.x = e.pageX;
position.y = e.pageY;
// console.log(position);
});
return { position }; //最后要暴露出这个数据
}
};
</script>

选项式api 与 组合式api

  • 解决逻辑关注点分散的问题

vue2:选项式api,

vue3 :组合式api,写在setup()中,setup中没有this

export default {
name: 'App',
// components: {
// HelloWorld
// },
setup() { //数据入口
console.log('setup中的this为',this) //输出: setup中的this为 undefined
let position = reactive({}); //构建响应式对象
window.addEventListener('mousemove', e => {
position.x = e.pageX;
position.y = e.pageY;
// console.log(position);
});
return { position }; //最后要暴露出这个数据
}
};

ref

创建一个响应式变量

const time = ref(0); //创建值类型的变量 number  string

reactive

  • vue2中存在一个Vue.observable方法,用来返回一个可响应的对象,在vue2中,data函数返回一个对象,vue内部会用Vue.observable 来处理
const position = reactive({
//创建响应对象
x: 0,
y: 0,
info: computed(() => {
return `当前位置在 X: ${position.x} Y:${position.y}`;
})
});

toRef

可以用来为源响应式对象上的 property 性创建一个 ref。然后可以将 ref 传递出去,从而保持对其源 property 的响应式连接。

const state = reactive({
foo: 1,
bar: 2
})
//三种方式创建变量
const fooToRef = toRef(state, "foo"); // fooToRef++ 可以响应,state.foo同台改变
const fooRef = ref(state.foo); //无现象 stata不变
let foo = state.foo;//无现象 stata不变

通过上面的小测试可以看到,toRef是将变量与响应式对象建立引用关系,变量改变时可以改变源响应对象

toRefs

参考地址

  • 作用:让props中的值变成响应式的

传入的props是响应式的,会实时更新,传递给setup就能直接使用

export default {
props: {
title: String
},
setup(props) {
console.log(props.title)
}
}

每次调用props中的属性都需要用 props.[属性名]的形式,书写复杂,考虑到es6的解构赋值

但是使用es6解构会消除prop的响应性,所以使用toRefs来简化写法

props:{
user:{
type:String
}
}
import{toRefs} 'vue' const { user } = toRefs(props)

watch

参考

watchEffect

占坑

生命周期

选项式 API Hook inside setup
beforeCreate Not needed*
created Not needed*
beforeMount onBeforeMount
mounted onMounted
beforeUpdate onBeforeUpdate
updated onUpdated
beforeUnmount onBeforeUnmount
unmounted onUnmounted
errorCaptured onErrorCaptured
renderTracked onRenderTracked
renderTriggered onRenderTriggered

vue3 一些关键属性的更多相关文章

  1. VUE3 之 Non-Props 属性

    1. 概述 墨菲定律告诉我们:人总是容易犯错误的,无论科技发展到什么程度,无论是什么身份的人,错误总是会在不经意间发生.因此我们最好在做重要的事情时,尽量去预估所有可能发生的错误,并思考错误发生后的补 ...

  2. TCustomControl绘制自己和图形子控件共四步,TWinControl关键属性方法速记

    TCustomControl = class(TWinControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPain ...

  3. Redis(二):redis命令构建及关键属性解析

    上一篇文章,我们从框架层面,主要介绍了redis的启动过程,以及主要的命令处理流程逻辑.这些更多的都是些差不多的道理,而要细了解redis,则需要更细节的东西. 今天我们稍微内围的角度,来看看几个命令 ...

  4. CSS:布局的三个关键属性:float、position、display

    最近在出差,就我一个在这里.客户要做几个页面,涉及到了页面的布局问题,没办法自己得做了.然后就遇到了一些问题.页面不论怎么都不能按照设想的布局. 以前也没有做过网页布局方面的工作.上网上找类似的例子, ...

  5. 【笔记】W3C CSS关键属性

    white-space属性: white-space 属性设置如何处理元素内的空白. 可能的值 值 描述 normal 默认值,合并所有空格,换行符会被浏览器忽略 pre 空白会被浏览器保留.其行为方 ...

  6. RTB业务知识之2-Impression概念和关键属性

    一.定义-impression This object describes an ad placement or impression being auctioned. A single bid re ...

  7. HttpSession的关键属性和方法

    1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号:2.这个用户随后的所有请求都应包括这个标识号.服务器会校对这个标识号以判断请求属于哪个se ...

  8. 关于vue3的inheritAttrs属性和$attrs的部分用法

    当我们在父组件中想要为子组件的某一个标签添加一些样式(注意,这里的是指attributes,css样式只是其中一种属性而已) <show-message id="lkx" c ...

  9. [PHP] 编写爬虫获取淘宝网上所有的商品分类以及关键属性 销售属性 非关键属性数据

    参考文章地址:https://blog.csdn.net/zhengzizhi/article/details/80716608 http://open.taobao.com/apitools/api ...

随机推荐

  1. AcWing 216 Rainbow 的信号

    题意 给定一个长度为n的序列,然后从\(1\sim N\) 这 N 个数中选取两个数\(l,r\) , 如果\(l>r\),则交换\(l,r\).把第\(l\) 个数到第\(r\)个数取出来构成 ...

  2. A - 敌兵布阵 ——B - I Hate It——C - A Simple Problem with Integers(线段树)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  3. git仓库更换远程地址

    首先进入项目所在文件夹,右键git bash (1)查看当前的远程地址 git remote -v (2)删除当前的远程地址 git remote rm origin (3)添加远程地址 git re ...

  4. 大数据开发-linux后台运行,关闭,查看后台任务

    在日常开发过程中,除了例行调度的任务和直接在开发环境下比如Scripts,开发,很多情况下是shell下直接搞起(小公司一般是这样),看一下常见的linux后台运行和关闭的命令,这里做一个总结,主要包 ...

  5. μC/OS-III---I笔记2---实钟节拍

    所谓时钟节拍,就是CPU以固定的频率产生中断,可以看做是系统的心跳.内核利用这个时钟节拍来管理各个任务的一些时间管理比如延时,定时,超时检测,时间轮片调度等.时钟节拍的频率一般10Hz--1000Hz ...

  6. Keras模型拼装

    在训练较大网络时, 往往想加载预训练的模型, 但若想在网络结构上做些添补, 可能出现问题一二... 一下是添补的几种情形, 此处以单输出回归任务为例: # 添在末尾: base_model = Inc ...

  7. Python errors All In One

    Python errors All In One SyntaxError: invalid character in identifier \u200b, ZERO WIDTH SPACE https ...

  8. CustomEvent & Event

    CustomEvent & Event js 自定义事件 const event = new CustomEvent(typeArg, customEventInit); // add an ...

  9. JS Object Deep Copy & 深拷贝 & 浅拷贝

    JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  10. Typescript & classes & public shorthand

    classes & public shorthand Also of note, the use of public on arguments to the constructor is a ...