vue 3.0 —— 之初体验一

下载 vue-next

  • github 中下载
  • 安装依赖:yarn or npm install
  • yarn dev 生成 packages\vue\dist\vue.global.js 文件
    复制出这个文件,就可以开始体验了

setup

setup Composition API的入口点
在beforeCreate挂接之前被调用
返回一个对象,则该对象上的属性将合并到组件模板的渲染上下文中(类似2.0中 proxy(vm,_data, key)
还可以返回一个render函数

参数

后续更新

返回值

setup() {
      const count = ref(0)
      const object = reactive({ foo: 'bar' })

      return {
        count,
        object
      }

      or 
      
      return () => h('div', [object .foo, count .value])
    }

reactive

响应式数据
类似之前的 data

<div id="app">
    <span>{{ state.count }}</span>
</div>
const { reactive, createApp } = Vue

// 创建、挂载
createApp({
    const state = reactive({
        count: 0
    })

    setup: () => {
        return {
            state
        }
    }
}).mount('#app')
运行结果

watchEffect

类似于 watch
当依赖的数据发生变化时,执行该方法
会自动运行一次

<div id="app">
    <span>{{ state.count }}</span>
    <br />
    <p id="print"></p>
    <button @click='handleAdd'>Add</button>
</div>
const { reactive, createApp, watchEffect, computed } = Vue

// 创建、挂载
createApp({

      // 响应式数据
        // 类似之前的 data 
        const state = reactive({
            count: 0
        })

        // 类似于 watch
        // 当依赖的数据发生变化时,执行该方法
        // 会自动运行一次
        watchEffect(() => {
            console.log('watchEffct')
            document.querySelector('#print').innerHTML = `count is ${state.count}`
        })

        // // 监听多个
        const stop = watchEffect(() => {
            console.log(`count is ${state.count}`)
        })
    setup: () => {
        return {
            state,
            // method
            handleAdd: () => {
                state.count++
                
                if (state.count === 3) stop()
            }
        }
    }
}).mount('#app')
运行结果

computed

<div id="app">
    <span>{{ state.count }}</span>
    <br />
    <p id="print"></p>
    <span>{{ `double ${double}` }}</span>
    <br />
    <button @click='handleAdd'>Add</button>
</div>
const { reactive, createApp, computed } = Vue

// 创建、挂载
createApp({
    setup: () => {
        // 响应式数据
        // 类似之前的 data 
        const state = reactive({
            count: 0
        })

        return {
            state,
            // computed
            // 函数形式
            double: computed(() => state.count * 2),
            // or
            // get set 形式
            //double: computed({
            //     get() { return state.count * 2 },
            //    set(value) { state.count = value }
            // })
            // method
            handleAdd: () => {
                state.count++
                // double.value++ 
            }
        }
    }
}).mount('#app')
运行结果

ref 引用

不同于之前的 ref
老版本是组件实例的引用 or dom 节点
新版传入一个值返回一个响应式的对象

<div id="app">
    <!-- 使用时 自动读取 value 属性 -->
    <span>{{ num }}</span>
    <br />
    <button @click='handleAdd'>Add</button>
</div>
const { reactive, createApp, ref } = Vue

// 创建、挂载
createApp({
    setup: () => {
      // 返回一个 { value: 100 }
      const num = ref(100)

        return {
            num,
            // method
            handleAdd: () => {
                // 设置值时  必须改变 value 属性
                num.value++
            }
        }
    }
}).mount('#app')
运行结果

readonly

<div id="app">
    <span>{{ state.count }}</span>
    <br />
    <button @click='handleAdd'>Add</button>
</div>
createApp({
    setup() {
        const state = readonly(reactive({
            count: 1
        }))
        const handleAdd = () => {
            state.count++
        }

        return {
            state,
            handleAdd
        }
    }
}).mount('#app')
运行结果

watch

与 Vue.$watch 等效

<div id="app">
    <span>{{ state.count }}</span>
    <br />
    <button @click='handleAdd'>Add</button>
</div>
createApp({
    setup() {
        const state = reactive({
            count: 1
        })
        const num = ref(0)
        const handleAdd = () => {
            state.count++
            num.value++
        }

        // 第一参数需要监听的对象 
        // 第二个参数回调函数

        // 观察一个值
        watch(() => state.count, (count, preCount) => {
            console.log('count:')
            console.log(count)
            console.log('preCount')
            console.log(preCount)
        })

        // 还可以观察 ref
        watch(num, (count, preCount) => {
            console.log('count:')
            console.log(count)
            console.log('preCount')
            console.log(preCount)
        })

        // 观察多个值
        watch([() => state.count, num], (count, preCount) => {
            console.log('count:')
            console.log(count)
            console.log('preCount')
            console.log(preCount)
        })

        return {
            state,
            handleAdd
        }
    }
}).mount('#app')
运行结果

【笔记不易,如对您有帮助,请点赞,谢谢】

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