更新设置选项内 axios 响应回调中的反应数据 - Vue 3

Tay*_*lor 2 javascript vue.js axios vuejs3 vue-composition-api

我正在组件的 Setup 方法中进行 Axios 调用。然后我想设置一个名为 books 的变量。在 vue 2 中,我将在创建的钩子中进行调用,然后用于this设置变量。this在 vue 3 中,setup 方法中没有可用的内容,那么如何在 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 }
  }
Run Code Online (Sandbox Code Playgroud)

Bou*_*him 6

根据composition api 文档

反应式
接受一个对象并返回原始的反应式代理......
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') }
  }
Run Code Online (Sandbox Code Playgroud)

或使用ref

  setup() {
      let books = ref<Array<Book>>([])
        HTTP.get('/books')
            .then(response => {
              
                books.value = response.data
            })
            .catch(function (error) {
                console.log(error);
            })
            return { books }
  }
Run Code Online (Sandbox Code Playgroud)