vue3中的setup

简介: vue3中的setup

前言

setup是vue3中的一个全新的配置项,值为一个函数;

setup是所有**CompositionAPI(组合API)**的基础,组件中所用到的数据、方法等都需要在setup中进行配置

setup中的两种返回值

  • 返回一个对象,对象中的属性、方法,在模板中均可直接使用
<template>
  <div>{{ sayHello() }}</div>
  <div>{{ name }}</div>
</template>
<script>
export default {
  name: "App",
  setup() {
    // 数据
    let name = "张三";
    let age = "18";
    // 方法
    function sayHello() {
      alert(`我叫${name},我${age}岁了,你好啊`);
    }
    // 第一种return,返回一个对象
    return {
      name,
      age,
      sayHello,
    };
  },
};
</script>
  • 在vue2的配置中可读取到vue3配置中的属性和方法;在vue3的配置中不能读取vue2配置中的属性和方法
<template>
  <div>{{ name }}</div>
  <!-- <div>{{ sayHello() }}</div> -->
  <div>{{ test2() }}</div>
</template>
<script>
export default {
  name: "App",
  data() {
    return {
      sex: "男",
    };
  },
  methods:{
    sayHello() {
    alert('你好啊')
  }
  },
  setup() {
    // 数据
    let name = "张三";
    let age = "18";
    function test2() {
    console.log(this.sex,'sex');
    console.log(this.sayHello,'sayHello');
  }
    // 第一种return,返回一个对象
    return {
      name,
      age,
      test2
    };
  },
};
</script>
  • 如果vue2和vue3的配置有冲突,则vue3的setup优先
data() {
  return {
    sex:'男'
  }
},
setup() {
  const sex = ref('女')
  return {
    sex
  }
}

setup执行的时机

在beforeCreate之前执行一次,this是undefined

beforeCreate(){
  console.log('beforeCreate');
},
setup(){
  console.log('setup',this);
}

setup的参数

第1个参数:props是一个对象,包含父组件传递给子组件的所有数据;在子组件中使用props进行接收。

第2个参数:context,是一个对象。该属性是props中没有声明接收的所有的对象;如果你使用props去获取值,同时props中你声明了你要获取的值

则:获取的值是undefined

//父组件
<template>
  <Child msg="你好啊" aa="111"></Child>
</template>
<script>
import { ref } from "vue";
import Child from "./Child.vue";
export default {
  components: { Child },
  name: "App",
  setup() {
    return {
    };
  }
};
</script>
//子组件
<template>
  <div>{{ msg }}</div>
</template>    
<script>
export default {
    props:['msg'], // 需要声明一下接受到了,否则会报警告
    setup(props,context){
        console.log(props,context,'父传子接收到了');
    }
}
</script>

注意点:

①、vue3支持向下兼容,vue2中的data、methods配置项在vue3中都能够使用,但是尽量不要将vue3中的配置项和vue2.x配置项混用;

②、vue2.x配置(data、methods、computed等)中可以访问setup中的属性、方法,但是在setup中不能访问vue2.x配置(data、methods、computed等);

③、如果vue2配置与vue3配置存在重名,则以谁在上面谁优先展示;

④、setup不能是一个async函数,因为返回值不再是return的对象,而是promise,模板看不到return对象中的属性;


相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
143 64
|
2月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
115 60
|
10天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
39 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
39 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
33 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
42 1
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
2月前
|
JavaScript 前端开发 API
从Vue 2到Vue 3的演进
从Vue 2到Vue 3的演进
44 0
|
2月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
65 0

热门文章

最新文章