欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue3学习笔记一:createApp, ref, reactive, onMounted,computed

程序员文章站 2022-05-17 20:10:23
...

compositions-api的优势

可以将每个功能相关的代码放在一个部分,避免代码混乱。后面的示例代码中可以看到,将人物部分的逻辑和标题相关的逻辑可以提取到单独的方法中,如果是正式的项目中,这两块的逻辑比较复杂,可以将它们提取到两个单独的js文件中,类似与vue2中的mixins但是不会出现mixins中各个部分的属性互相影响的问题

createApp

用于创建一个新的Vue应用实例

createApp({
	setup(){
		//......
	}
}).mount('#app')

setup

它是Composition API的入口点。创建组件实例,然后初始化props,紧接着就会调用setup函数。它在beforeCreate钩子之前被调用。

ref

用于给基本类型的数据添加响应式

setup(){
	let title = ref('标题')
	return {title}
}

reactive

用于给对象添加响应式

setup(){
	let persion = reactive({name:'小明'})
	return {persion}
}

ref和reactive的区别

  • ref也可以传入对象,也可以实现响应式,其内部会自动调用reactive方法
  • reactive传入基本类型控制台会出警告,并且不会实现响应式
  • 给ref的响应式对象赋值的时候要用.value的形式赋值

computed

这个计算属性方法,接收一个getter函数,返回一个默认不可手动修改的ref对象

setup(){
	let title = ref('标题')
	let subtitle = computed(()=> '二级' + title.value )
	return {title, subtitle}
}

代码部分

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <h2>{{title}}</h2> - <span>{{subTitle}}</span>
    
    <button @click="changeTitle">改变标题</button> 
    <p>姓名:{{form.name}}</p>
    <p>年龄:{{form.age}}</p>
    <button @click="changeAge">改变年龄</button>
  </div>
  <script src="https://unpkg.com/[email protected]"></script>
  <script>
    // 引入
    const { createApp, ref, reactive, onMounted,  computed} = Vue;

    // 初始化
    createApp({
      setup(){
        let {title, changeTitle} = titleFn();
        let {form, changeAge} = persionFn();
        
        // 计算属性
        let subTitle = computed(()=> title.value + 1000)
        return {title, changeTitle, form, changeAge, subTitle}; 
      }
    }).mount('#app')

    // 人物相关:引用类型的定义和修改
    function persionFn(){
      let form = reactive({name:'小明',age:66});
      function changeAge(){
        form.age = 100;
      }
      return {form, changeAge}
    }

    // 标题相关:定义和修改基本类型
    function titleFn(){
      let title = ref('标题一');
      function changeTitle(){
        // 注意这里到value里赋值
        title.value = '标题66666666二';
      }

      return {title, changeTitle};
    }
  </script>
</body>
</html>
相关标签: vue3 vue