vue3 如何让 axios 请求的数据显示在页面上?

我让 chatgpt 给了我一段 『vue3 axios demo代码』

<template>
  <div>
    <h1>Vue3 Axios Demo</h1>
    <button @click="fetchData">Fetch Data</button>
    <ul>
      <li v-for="item in data" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios';
import { reactive } from 'vue';

export default {
  setup() {
    const state = reactive({
      data: [],
    });

    const fetchData = async () => {
      const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
      state.data = response.data;
    };

    return {
      fetchData,
      data: state.data,
    };
  },
};
</script>

图片.png

而且 chatgpt 说,响应数据会显示在页面上

但是这个响应的数据,不会显示在页面上,需要做什么修改?

图片.png

阅读 2.7k
2 个回答
<template>
  <div>
    <h1>Vue3 Axios Demo</h1>
    <button @click="fetchData">Fetch Data</button>
    <ul>
      <li v-for="item in state.data" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios';
import { reactive } from 'vue';
export default {
  setup() {
    const state = reactive({
      data: [],
    });
  
    const fetchData = async () => {
      const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
      console.log(response.data)
      state.data = response.data;
    };

    return {
      fetchData,
      state
    };
  },
};
</script>

这样写或者这样写也可以:

<template>
  <div>
    <h1>Vue3 Axios Demo</h1>
    <button @click="fetchData">Fetch Data</button>
    <ul>
      <li v-for="item in data" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios';
import { reactive,toRefs } from 'vue';
export default {
  setup() {
    const state = reactive({
      data: [],
    });
  
    const fetchData = async () => {
      const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
      console.log(response.data)
      state.data = response.data;
    };

    return {
      fetchData,
      ...toRefs(state)
    };
  },
};
</script>

setup注意点:

由于在执行 setup函数的时候,还没有执行 Created 生命周期方法,所以在 setup 函数中,无法使用 data 和 methods 的变量和方法

<div>{{data}}</div>

hhh,没看到下面赋值没使用 toRefs,补一个测试 demo

测试地址

我一般使用 setup + ref 用起来习惯了。尴尬 ̄□ ̄||


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题