vue3较vue2的特别之处 - 组合式API

2022-02-23  本文已影响0人  张中华

vue2组件存在什么问题?

先看个例子:

<!--
 * @Author: zzh
 * @Date: 2022-02-22 12:59:53
 * @LastEditors: zzh
 * @LastEditTime: 2022-02-22 13:12:13
 * @Description: option api vs. composition api
 * @FilePath: \vue2-demos\src\demos\demo1.vue
-->
<template>
    <div class="container">
        <div> name: {{ name }}</div>
        <div> age: {{ age }}</div>
        <div> hobby: {{ hobby }}</div>
    </div>
</template>

<script>
// import xxxxx

export default {
  name: 'organizationalStructure',
  data() {
    return {
        name: 'zzh',
        age: 18,
        hobby: ['read', 'code', 'sport'],
    }
  },

  methods:{
      changeName() {},
      changeAge() {},
      changeHobby() {},
  },

  created() {
      this.name = '';
      this.age = '';
      this.hobby = '';
  },

  // .....其他生命周期钩子函数
}
</script>

当组件越来越大时,就会暴露一个问题,针对同一部分的代码会越来越多,而且在书写时也未必会严格按照一定的顺序,导致代码越来越混乱,难以维护。

composition api带来了哪些改变

依旧先看个例子:

<template>
  <div>name: {{ name }}</div>
  <div>{{ age }}</div>
  <div>{{ hobby }}</div>
  <div>{{ twiceTheAge }}</div>
</template>

<script lang="ts">
import { computed, defineComponent, onBeforeMount, ref, watch } from 'vue';

export default defineComponent({
    setup() {
        const name = ref('zzh');
        const changeName = () => {}
        // 生命周期
        onBeforeMount(changeName),// 在 `mounted` 时调用 `changeName`
        watch(name, (newValue, oldValue) => {
            console.log('The new name value is: ' + name.value)
        })

        const age = ref(18);
        const changeAge = () => {}
        // 计算属性
        const twiceTheAge = computed(() => age.value * 2)

        const hobby = ref(['read', 'code', 'sport']);
        const changeHobby = () => {}

        return {
          name,
          age,
          hobby,
          twiceTheAge,
        }
    },

    data() {},

    methods: {},
})
</script>

<style scoped></style>

函数式编程貌似是一个趋势,有点像react里面的react hook。这里可以将对某一个部分的作用代码规整到一起,当然如果当setup过大时,由于setup里面不能使用this,也可以将里面的功能代码封装起来,也可以更好的复用。因为从return就可以看出,其实setup这里只是希望得到return的结果。

参考地址:
script-setup:https://chengpeiquan.com/article/vue3-script-setup.html

上一篇 下一篇

猜你喜欢

热点阅读