You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3组合式API中onMounted阶段修改数据遇问题求助

问题原因及解决方法

这跟组件挂载阶段能不能修改数据没关系,问题出在异步请求的执行顺序上:

你写的axios.get是异步操作,发起请求后代码会继续往下走,不会等服务器返回数据。所以当你执行if (Task.value['description'] === '')这行代码时,Task.value = res.data还没执行,Task还是初始的空数组[],自然访问description会得到undefined。

正确实现方式

有两种常用写法:

方法1:把判断逻辑放到请求的then回调里

<script setup>
...
const Task = ref({}) // 建议初始化为空对象,接口返回的是单个任务对象而非数组
...
onMounted(() => {
    idTask.value = props.id
    axios
        .get("/tasks/" + idTask.value)
        .then(res => {
            Task.value = res.data
            // 拿到数据后再执行判断修改
            if (Task.value.description === '') {
                Task.value.description = 'Enter task description text'
            }
        })
})
..

方法2:用async/await让异步代码按顺序执行

<script setup>
...
const Task = ref({})
...
onMounted(async () => { // 添加async标记
    idTask.value = props.id
    const res = await axios.get("/tasks/" + idTask.value) // await等待请求完成
    Task.value = res.data
    if (Task.value.description === '') {
        Task.value.description = 'Enter task description text'
    }
})
..

额外提醒:你一开始将Task初始化为数组类型ref([]),但接口返回的是单个任务对象,建议改成ref({}),避免后续出现类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Валерий Климов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:37:00