Vue3【十九】自定义Hooks钩子 将数据和方法分组

Vue3【十九】自定义Hooks钩子 将数据和方法分组

Vue3【十九】自定义Hooks钩子 将数据和方法分组
每个分组都可以放置 各种生命周期钩子
分组和可以使用计算属性等

案例截图

Vue3【十九】自定义Hooks钩子 将数据和方法分组

目录结构

在这里插入图片描述

代码

person.vue

<template>
    <div class="person">
        <h2>Vue3自定义钩子Hooks</h2>
        <h4> 求和结果: {{ sum }} ×10 = {{ bigSum }}</h4>
        <button @click="add">  点击 sum+1 </button>

        <hr>
        <button @click="getImg">增加一张图片</button>
        <br>
        <img v-for="(img,index) in imgLists" :src="img" :key="index" alt="" width="200px">
    </div>
</template>

<script lang="ts" setup namwe="Person">
import useImg from '@/hooks/useImg';
import useSum from '@/hooks/useSum';

const { imgLists, getImg } = useImg();
const { sum, add, bigSum } = useSum();


</script>

<style scoped>
.person {
    background-color: #ff9e4f;
    box-shadow: 0 0 10px;
    border-radius: 30px;
    padding: 30px;
}

button {
    margin: 0 10px;
    padding: 0 5px;
    box-shadow: 0 0 5px;
    ;
}
</style>

app.vue

<template>
    <div class="app">
        <h1>你好世界! 我是App根组件</h1>
        <Person  />
    </div>
</template>

<script lang="ts" setup name="App">
import { ref } from 'vue';
import Person from './components/Person.vue'



</script>

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

useImg.ts

import { onMounted, reactive } from 'vue';
import axios from 'axios'; // npm install axios

export default () => {
    // 数据
    let imgLists = reactive([]);

    // 方法
    async function getImg() {
        try {
            let res = await axios.get('https://dog.ceo/api/breeds/image/random')
            console.log(res.data)
            imgLists.push(res.data.message)
        } catch (error) {
            alert(error)
        }
    }
    // 钩子 //页面一打开就来一张图片
    onMounted(() => {
        getImg()
    })
    // 提供给外部
    return {
        imgLists,
        getImg
    }
}

useSum.ts

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

export default function () {
    // 数据
    let sum = ref(0);
    let bigSum = computed(() => {
        return sum.value * 10;
    });

    // 方法
    let add = () => {
        sum.value++;
    }

    //钩子 页面加载时候加100
    onMounted(() => {
        add();
    })

    // 提供给外部
    return {
        sum,
        add,
        bigSum
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值