027、Vue3+TypeScript基础,使用自定义hook,把功能计算都放到hook中精简代码

01、在view中创建myhook文件夹,并创建2个文件。usesDog.ts代码如下:

import {onMounted, reactive} from "vue";
import axios from "axios";

export default function () {
    // 抓取图片
    let dogList = reactive([
        'https://images.dog.ceo/breeds/pembroke/n02113023_4373.jpg'
    ])

    // 异步函数
    async function getDog() {
        try {
            let result = await
                axios.get(
                    'https://dog.ceo/api/breed/pembroke/images/random'
                )
            dogList.push(result.data.message)
        } catch (error) {
            console.log(error)
        }
    }

    //钩子
    onMounted(() => {
            getDog()
        }
    )
    //给外部提供
    return {dogList, getDog}
}

02、usesSum.ts代码如下:

import {computed, onMounted, ref} from "vue";

export default function () {
    let num = ref(0);
    let bigNum =
        computed(() => num.value * 2)

    function add() {
        num.value += 1;
    }

    //钩子
    onMounted(() => {
            add()
        }
    )
    //给外部提供
    return {num, bigNum, add}
}

03、界面如下:

 04、App.vue代码如下:

<template>
  <div class="app">
    <h2>App.Vue</h2>
    <Person/>
  </div>
</template>

<script lang="ts" setup name="App">
// JS或TS
import Person from './view/Person.vue';
</script>

<style scoped>
.app {
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>

05、Person.vue代码如下:

<template>
  <div class="person">
    <h2>当前数值为:{{ num }}, 两倍为:{{ bigNum }}</h2>
    <button @click="add">点我+1</button>
    <hr>
    <img v-for="(dog,index) in dogList" :src="dog" :key="index"><br>
    <button @click="getDog">获取小狗</button>
  </div>
</template>

<script lang="ts" name="Person001" setup>
import useDog from "@/view/myhook/useDog";
import useSum from "@/view/myhook/usesSum";

const {num, bigNum, add} = useSum();
const {dogList, getDog} = useDog();

</script>
<style scoped>
.person {
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;

  button {
    margin: 0 5px;
  }

  img {
    max-width: 100px;
    height: 100px;
    margin: 10px;
  }
}
</style>

06、效果如下:

 07、浏览器运行效果如下:

 

posted @ 2024-08-18 17:07  像一棵海草海草海草  阅读(11)  评论(0编辑  收藏  举报