前端学习笔记(7)-Vue组合式api的理解及使用

1.选项式api(Options API)

        组合式api这个概念是在Vue3.0引出的,为了更好的理解,我们需要先了解Vue3.0前我们使用的选项式api。

  • 其在vue2.x项目中使用的就是选项API写法
  • 代码风格:data选项写数据,methods选项写函数...,一个功能逻辑的代码分散
  • 优点:易于学习和使用,写代码的位置已经约定好
<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8" />
    <title>姓名案例,watch实现</title>
    <!-- <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  </head>
  <style>
    * {
      margin: top 20px;
    }
  </style>
  <!-- v-model页面上的输入影响数据的输入 -->
  <body>
    <div id="root">
      姓:<input type="text" v-model:value="firstname" /><br />
      名:<input type="text" v-model="lastname" /><br />

      全名:<span>{{fullName}}</span><br />
    </div>
  </body>
  <script>
    Vue.config.productionTip = false;

    const vm = new Vue({
      el: "#root",
      data: {
        firstname: "张",
        lastname: "三",
        // 存在vm自身_data
        fullName: "张-三",
      },

      watch: {
        firstname(newValue) {
          // 他不是Vue管理的函数
          setTimeout(() => {
            this.fullName = newValue + "-" + this.lastname;
          }, 1000);
        },
        // 计算属性vs监听属性
        // 监听非常容易开启异步任务
        //(不被vue所管理的,定时器回调函数,ajax回调函数,promise回调函数)最好写成箭头函数,这样this的指向才是vm或组件实例对象

        lastname(newValue) {
          setTimeout(() => {
            this.fullName = this.firstname + "-" + newValue;
          }, 1000);  
        },
      },
    });
  </script>
</html>

对于某个功能的实现,咱们就需要分别在各个部分分别进行操作,一般都是data中定义一些初始化数据,method里在写一些方法,在watch监听一下数据变化。那这样的话是不是说我们的业务是不是分散到各个option这个选项中了。当功能少的时候还好,但功能一多业务一多就会发现,日后你想修改代码或者添加某个逻辑的功能时候,由于零散的原因就找起来代码来就特别的累。

  •  缺点:代码组织性差,相似的逻辑代码不便于复用,逻辑复杂代码多了不好阅读
  • 补充:虽然提供mixins用来封装逻辑,但是出现数据函数覆盖的概率很大,不好维护

由此引出了另一种代码风格 

 2.组合式api(Compositon API)

咱们在vue3.0项目中将会使用组合API写法      

  • 代码风格:一个功能逻辑的代码组织在一起(包含数据,函数...)
  • 优点:功能逻辑复杂繁多情况下,各个功能逻辑代码组织再一起,便于阅读和维护
setup(){
    const testName = reactive({
          firstName: '江',
          lastName: '正阳',
        })
        // 通过计算属性
        const fullName = computed(() => {
          return testName.firstName + '-' + testName.lastName
        })
    
        watchEffect(() => {
          const names = input4.value.split('-')
          testName.firstName = names[0]
          testName.lastName = names[1]
        })
}
  • 组合式API通过setup(){}选项暴露,该选项函数返回值可以在模板和实例中被访问
  • 组合式API可以理解为关注点抽离的入口,我们可以把之前分散在各个选项data,computed,watch,methods,mouted的功能代码抽离到setup里面,然后暴露出来
  • 组合式API可以抽离代码,意味着setup就不把data,computed,watch,methods,mouted这些功能作为选项了,但是如何实现与这些选项相匹配的功能呢?vue3为此暴露了与之匹配的ref,reactive,computed,watch,watchEffect等方法以及onMounted等生命周期
  • 利用ref,reactive,computed等接口可以把之前分散在各个选项的逻辑功能块组合到一起,也就是,我们把之前分散的关注点抽离到一个代码块了,实现了关注点抽离

区别:Vue3 - 什么是组合式 API?与选项式 API 有什么不同?(先从 Vue2 角度进行讲解,然后过渡到 Vue3)详细教程_王佳斌的博客-CSDN博客 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3.0 推出了一种全新的 API,即组合式 API,它可以让我们更好地组织 Vue 组件代码。这里是一些 Vue 组合式 API笔记: ### setup `setup` 是组合式 API 中的一个钩子函数,它在 `beforeCreate` 之前被调用。`setup` 函数接收两个参数: - `props`: 组件的属性对象 - `context`: 组件上下文对象 `setup` 函数必须返回一个对象,这个对象包含组件内部需要用到的数据、方法等。 ```javascript import { ref } from 'vue' export default { props: { msg: String }, setup(props, context) { const count = ref(0) // ref 可以用来定义响应式数据 const increase = () => count.value++ return { count, increase } } } ``` 在组件模板中,可以直接使用 `count` 和 `increase`,它们都是响应式的。 ### reactive `reactive` 可以用来创建一个响应式的对象。 ```javascript import { reactive } from 'vue' const state = reactive({ count: 0, msg: 'Hello' }) ``` 在模板中,可以直接使用 `state.count` 和 `state.msg`。 ### ref `ref` 可以用来创建一个响应式的值。 ```javascript import { ref } from 'vue' const count = ref(0) ``` 在模板中,可以直接使用 `count.value`。 ### computed `computed` 可以用来定义一个计算属性。 ```javascript import { computed, ref } from 'vue' const count = ref(0) const doubleCount = computed(() => count.value * 2) ``` 在模板中,可以直接使用 `doubleCount`。 ### watch `watch` 可以用来监听一个响应式值的变化。 ```javascript import { watch, ref } from 'vue' const count = ref(0) watch(count, (newValue, oldValue) => { console.log(`count changed from ${oldValue} to ${newValue}`) }) ``` ### 生命周期钩子函数 组合式 API 中,可以使用 `onBeforeMount`、`onMounted`、`onBeforeUpdate`、`onUpdated`、`onBeforeUnmount`、`onUnmounted` 等函数来替代传统的生命周期钩子函数。 ```javascript import { onMounted, onUnmounted } from 'vue' export default { setup() { onMounted(() => { console.log('mounted') }) onUnmounted(() => { console.log('unmounted') }) } } ``` 以上是 Vue 组合式 API 的一些笔记,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值