vue2 中,在mounted生命周期中使用nextTick,获取不到props
时间: 2024-02-20 20:01:47 浏览: 67
vue.js页面加载执行created,mounted的先后顺序说明
在 `mounted` 生命周期中使用 `nextTick` 是为了确保组件已经渲染完成后再执行一些操作。但是,使用 `nextTick` 并不会影响您在 `mounted` 生命周期中获取 `props`,因为 `props` 已经在组件创建、初始化和挂载过程中被解析和传递给组件了。
如果您在 `nextTick` 回调函数中还是无法获取到 `props`,可能是因为使用了异步更新 `props` 的方式,例如通过 `setTimeout` 或者 `axios` 获取数据之后再传递给子组件。这种情况下,您可以在 `watch` 中监听 `props` 的变化,然后在变化时执行需要的操作。
以下是一个使用 `nextTick` 和 `watch` 的示例代码:
```vue
<template>
<div>
<p>My name is {{ name }}</p>
</div>
</template>
<script>
export default {
props: {
id: {
type: Number,
required: true
}
},
data() {
return {
name: ''
}
},
mounted() {
this.$nextTick(() => {
console.log('Component is mounted')
})
},
watch: {
id(newValue, oldValue) {
console.log('id is changed', newValue, oldValue)
this.getNameById(newValue)
}
},
methods: {
getNameById(id) {
// 通过 axios 获取数据并更新 name
axios.get(`/api/user/${id}`)
.then(res => {
this.name = res.data.name
})
}
}
}
</script>
```
在上面的代码中,我们使用 `watch` 监听 `id` 的变化,并在变化时调用 `getNameById` 方法更新 `name`。在 `mounted` 生命周期中,我们使用 `nextTick` 等待组件渲染完成后再执行回调函数。这样就可以在组件渲染完成后获取到正确的 `props` 值了。
阅读全文