javascript - 在设置选项内的 axios 响应回调中更新反应数据 - Vue 3
问题描述
我正在组件的 Setup 方法中调用 Axios。然后我想设置一个名为 books 的变量。在 vue 2 中,我会在创建的钩子中进行调用,然后用于this
设置变量。在 vue 3 中,setup 方法中没有this
可用的,那么如何在 axios 调用之外访问数据?我想获取一系列书籍,然后将其设置为 books 变量。这将如何完成,在 Vue 3 中是否有更好的方法来做到这一点?我的设置方法如下:
setup() {
let books = reactive<Array<Book>>([])
HTTP.get('/books')
.then(response => {
//Normally here I would do this.books
books = response.data
})
.catch(function (error) {
console.log(error);
})
return { books }
}
解决方案
根据组合api文档:
reactive
接受一个对象并返回原始的响应式代理 ...
...
ref
接受一个内部值并返回一个响应式和可变的 ref 对象。ref 对象有一个属性 .value 指向内部值...
所以reactive
函数应该有一个内部属性:
setup() {
let state = reactive<Array<Book>>({books:[]})
HTTP.get('/books')
.then(response => {
state.books = response.data
})
.catch(function (error) {
console.log(error);
})
return { books:toRef(state,'books') }
}
或使用ref
setup() {
let books = ref<Array<Book>>([])
HTTP.get('/books')
.then(response => {
books.value = response.data
})
.catch(function (error) {
console.log(error);
})
return { books }
}
推荐阅读
- laravel - Laravel Pusher:让所有用户连接到 Presence Channel
- javascript - 无法绑定到“paint”,因为它不是 Angular 9 中带有 mapbox 的“mgl-layer”的已知属性
- reactjs - 组件的子组件不会被渲染
- flutter - 函数内的 Geoflutterfire 应简单地返回 firestore 数据库中的所有现有值,而不是永远监听
- android - Kotlin 移除按钮的背景色
- javascript - Axios 发布发送正文,但正文未使用 fetch 和 Postman 定义
- canvas - 由于在织物 js 画布中创建数据 url(图像)而发生内存泄漏问题
- javascript - 如何向客户端公开/导出嵌套函数?
- r - R Shiny renderTable - 冻结列
- ubuntu - 找不到golang编译简单的应用程序模块(GOPATH?)