onMounted 当没有要关联的活动组件实例时调用

问题描述 投票:0回答:1

Symfony/VueJS 组件

// IMPORTS
import getUser from "../hooks/getUser";
import { useRoute } from 'vue-router'

// VARS
const route = useRoute()
const { user } = getUser(1)
const routeId = computed(() => route.params.id)

// WATCH
watch(route,() => {
  getUser(routeId)
})

../hooks/getUser

import { onMounted, ref }   from "vue"
import axios                from "axios"

export default function getUser(id){
    // VARS
    const user = ref()

    // FUNCTIONS
    const getUser = async() => {
        await axios
            .get(`https://jsonplaceholder.typicode.com/users/${id}`)
            .then(r  => user.value = r.data)
            .catch(e => console.log(e))
    }

    // ON-MOUNTED
    onMounted(() => (id) ? getUser(id) : false )

    // RETURNS
    return { user }
}

大家好,JS,VUE 专业人士, 请帮我解决这个问题。 我收到此错误

[Vue warn]:当没有要关联的活动组件实例时调用 onMounted。生命周期注入 API 只能在 setup() 执行期间使用。如果您使用异步 setup(),请确保在第一个等待语句之前注册生命周期挂钩。

有人可以告诉我我做错了什么吗?

vue.js vuejs3
1个回答
0
投票

你误用了

onMounted
钩子,当组件挂载到 DOM 时,这个钩子给你一个回调来运行其中的任何代码,它的回调不带任何参数,但它可以是异步的:

import { onMounted, ref }   from "vue"
import axios from "axios"

export default function getUser(id){
    // VARS
    const user = ref()

    // FUNCTIONS
    const getUser = async () => {
        await axios
            .get(`https://jsonplaceholder.typicode.com/users/${id}`)
            .then(r  => user.value = r.data)
            .catch(e => console.log(e))
    }

    // ON-MOUNTED
    onMounted(getUser)

    // or 
    /* onMounted(async ()=> {
        await getUser()
    })*/

    // RETURNS
    return { user }
}

© www.soinside.com 2019 - 2024. All rights reserved.