Vue 中数据交互 fetch 的基础实例(入门)

本文通过一个vue2的实例展示了如何利用fetch API从服务器获取并处理JSON数据。详细解释了fetch的基本用法,包括发送请求、处理响应头及转换响应数据。点击按钮即可触发数据获取,并在控制台打印出接口返回的数据。

前后端数据的交互在工作中必不可少,这里提供一个 fetch 的响应测试的实例

用法:fetch() 接受一个 URL 字符串作为参数,默认向该网址发出 GET 请求,返回一个 Promise 对象。它的基本用法如下。

基本语法如下:
fetch(url)
  .then(...)
  .catch(...)


//下面是一个例子,从服务器获取 JSON 数据。

fetch('http://www.pudge.wang:3080/api/rated/list')
      //fetch方法:用来快速获取json格式数据(详情见底下)
      // 第一个 then 接受到的是请求头的相关信息
  .then(response => response.json())
	  //第二个.then拿到的是从后端请求回来的真正的数据
	  //想要获取响应数据,需在第一个then中将响应数据转为json再返回给第二个then,在第二个then中去获取值
  .then(json => console.log(json))
      // 请求错误时执行
  .catch(err => console.log('Request Failed', err)); 

基础实例(vue2中):

提供一个可用的接口:http://www.pudge.wang:3080/api/rated/list

<template>
  <div>
    <h2>这是 fetch 的页面</h2>
    <button @click="handleClick()">btn</button>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    handleClick() {
      fetch("http://www.pudge.wang:3080/api/rated/list")
        // 第一个 then 接受到的是请求头的相关信息
        .then((res) => {
          // console.log(res); //拿到的是一个状态码
          //用json格式读出来,也可以改为text,得到的就是一个text字符串,但是要做一个json解析,所以极少用text格式
          return res.json();
        })
        //第二个.then拿到的是从后端请求回来的真正的数据
        //想要获取响应数据,需在第一个then中将响应数据转为json再返回给第二个then,在第二个then中去获取值
        .then((res) => {
          console.log(res);
        })
        // 请求错误时执行
        .catch((err) => {
          console.log(err);
        });
    },
  },
};
</script>


效果:
  点击按钮 btn,打印出接口中的数据

### 如何在 Vue.js 中实现数据流的 Fetch 操作 在 Vue.js 应用程序中,可以通过 `fetch` API 或其他 HTTP 客户端库(如 Axios)来执行网络请求以获取远程数据。以下是基于 `fetch` 的具体实现方式: #### 使用 Fetch 获取数据并绑定到组件 下面是一个完整的示例,展示了如何通过 `fetch` 方法从服务器拉取数据并将结果绑定到 Vue 组件的数据模型。 ```javascript <template> <div> <h1>Fetch Data Example</h1> <ul v-if="items.length"> <li v-for="(item, index) in items" :key="index">{{ item.name }}</li> </ul> <p v-else>Loading...</p> </div> </template> <script> export default { data() { return { items: [] // 存储从服务器获取的数据 }; }, created() { this.fetchData(); // 在组件创建时调用 fetchData 函数 }, methods: { async fetchData() { try { const response = await fetch('https://api.example.com/items'); // 替换为实际接口地址 [^2] if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const data = await response.json(); this.items = data; // 将返回的数据赋值给 items 属性 } catch (error) { console.error('Error fetching the resource:', error); } } } }; </script> ``` 上述代码实现了以下功能: - 当组件实例化时,在生命周期钩子函数 `created()` 调用了 `fetchData` 方法。 - `fetchData` 是一个异步方法,它发送了一个 GET 请求至指定 URL 并解析 JSON 响应。 - 如果成功接收到数据,则将其存储到组件的 `data` 对象中的 `items` 数组里;如果失败则捕获错误并在控制台打印日志。 #### Vuex 集成 Fetch 流程 当项目规模较大或者需要跨多个组件共享状态管理时,可以考虑集成 Vuex 来统一管理和分发这些数据。Vuex 提供了一种集中式的解决方案用于管理应用程序的状态逻辑[^1]。 这里提供一段关于如何结合 Vuex 和 Fetch 进行全局状态同步的例子: ##### Store 文件定义 (`store/index.js`) ```javascript import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { items: [] }, mutations: { SET_ITEMS(state, payload) { state.items = payload; } }, actions: { async fetchItems({ commit }) { try { const response = await fetch('https://api.example.com/items'); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const data = await response.json(); commit('SET_ITEMS', data); // 更新 Vuex State } catch (err) { console.log(err); } } } }); export default store; ``` ##### 主文件配置 (`main.js`) ```javascript import Vue from 'vue'; import App from './App.vue'; import store from './store'; // 导入 Vuex Store new Vue({ el: '#app', render: h => h(App), store // 注册 Vuex Store 到根实例 }); ``` ##### 组件内使用 Vuex 数据 ```html <template> <div> <h1>Vuex Fetch Example</h1> <ul v-if="items && items.length"> <li v-for="(item, index) in items" :key="index">{{ item.name }}</li> </ul> <button @click="loadItems">Load Items</button> </div> </template> <script> export default { computed: { items() { return this.$store.state.items; // 映射 Vuex State 至本地计算属性 } }, methods: { loadItems() { this.$store.dispatch('fetchItems'); // 触发 Vuex Action 执行 Fetch } } }; </script> ``` 以上代码片段说明了如何借助 Vuex Actions 处理复杂的业务逻辑以及保持 UI 渲染与后台交互解耦合的设计模式。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值