vue3.0响应式api使用1

要使用vue3.0新的api必须要导入

脚手架导入

//在需要使用的vue文件中按需导入,也可在main之中全局导入
import { defineComponent,reactive,ref,toRefs,toRef,isRef,watchEffect} from "vue";

普通HTML导入

//在head中导入模块
<script src="https://cdn.jsdelivr.net/npm/vue@2.6"></script>
<script src="https://cdn.jsdelivr.net/npm/@vue/composition-api@1.0.0-beta.14"></script>
<script src="https://unpkg.com/vue@next"></script>

//在写以下代码
<script type="module">
        const  { reactive,ref,toRefs,toRef,isRef,watchEffect} = VueCompositionAPI
</script>

1. setup

核心,从生命周期钩子的视角来看,它会在 beforeCreate 钩子之前被调用,也可以看成是一个vue实例对象,作为在组件内使用 Composition API 的入口点,它可以实现大部分2.x的功能

接收两个参数:props,接收一个props对象,并返回一个响应式代理对象。context,vue实例对象可以看成2.x中的this,但是差别很大。

props,由于set之中无法访问当前vue实例也就是this,因此父组件传递过来的参数需要在传递一次,props是为了语义明确setup的参数实际也可以写成其他的
export default defineComponent({
    props:{
        test:{
            type:String
        }
    },
    setup(props,context){
        console.log(props.test)
    },
});
context,为了代替this但是目前最新版的这个对象的属性只剩下3个了,原本8个,context上的属性与2.x之中的功能一样
image.png

setup是一个函数它有返回值,返回值是一个对象将被合并到data之中

2. reactive

接收一个对象参数返回一个响应式代理对象 ,功能类似2.x的 Vue.observable()

可以作为当前页面的data数据,也可以在为了性能考虑项目没必要使用代替vuex

作为当前页面的data数据
setup(props, ctx) {
    const state = reactive({
      testA: "testDataA"
    });
    return {    //setup的返回值会被合并到data中,使用时像使用data就可以
        testA:state.testA
    }
}
作为代替vuex使用
//在store文件夹下新建一个store.js或者store.ts,如果是js需要去掉类型推断即any
import { reactive} from "vue";
var store:any = reactive({
  state:{
    screenCars:1,
    setTop:0
  },
  commit:{
    change:function(val:any){
        store.state.screenCars=val
    }
  }
})

export default store

//使用方式
import store  from '@/store/store'; //在需要的地方导入也可以在main全局注册

//可以在mounted生命周期中测试一下,使用方式取决于你的store文件中的写法
mounted(){
        store.commit.change(5) //改变screenCars
        console.log(store.state.screenCars) //获取改变screenCars
}
//这只是最基础写法,可以根据自己的需要进行优化

3. ref与toRefs与toRef

ref接收一个数值返回一个响应式可改变的对象,

为什么使用ref,首先基础类型是没有引用的,你直接改变是无法被监听到的,为了更好的响应式只能借助包装对象的形式来实现,2.x中的data返回的也是是一个对象哦。

var test=30
var count = ref(test)

//watchEffect类似于2.x的watch加了immediate属性,
watchEffect(()=>{ 
        console.log(count.value)
})
count.value++
//执行以上代码结果打印30,31

watchEffect(()=>{ 
        console.log(test)
})
test++
//执行以上代码打印结果只会打印30,test++的时候无法被监听到

ref作为响应式对象的属性自动结构无需在使用 .value 访问

var test=30
const count = ref(test)

const state=reactive({
  countTest:count //此处无需写count.value
})
console.log(state.countTest)

toRefs把一个响应式对象转换成普通对象,只不过这个对象上的每个属性节点,都是ref()类型

setup(props, ctx) {
  const state = reactive({
        testA: "testDataA",
        testB: ["testDataB"],
        testC: { testC: "testDataC" },
  });
  return {
    //当数据过多时不可能一一对应的写出来,那样太麻烦,因此可以解构
    //...state,但是解构是拷贝而不是引用因此会失去响应式,即数据改变无法被监听
    //toRefs很好的解决了这个问题
      ...toRefs(state), 
   };
}

toRef可以指定reactive对象的属性创建一个ref

setup(props, ctx) {
  const state = reactive({
        testA: "testDataA",
        testB: ["testDataB"],
        testC: { testC: "testDataC" },
  });
  return {
      ...toRef(state,'testA'),  //只有testA是响应式的
   };
}

isRef检查一个值是否为ref对象

下一章vue3.0响应式api使用2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335