NuxtJS请求接口

767 阅读1分钟

前言:nuxt提供asyncData 和 fetch ,但是初学者会混乱,到底用哪个?怎么用?之类的问题。下面就详细说一下

一、asyncData

在官网也说了asyncData是页面组件使用的,也就是components目录下的.vue组件是不可以使用的(使用了不执行代码也不报错),所以总结一下。pages下面的.vue文件(也就是页面组件)使用asyncData来请求接口数据。

但是要注意一点,asyncData中不可以使用this。

我们可以这样用:

<template>
  <div>
  	<News />
  	<ul>
  		<li v-for='item in list' :key='item.id'>
  			{{ item.imageName }}
  		</li>
  	</ul>
  </div>
</template>

<script>
export default {
  name: 'IndexPage',
  data () {
  	return {
  		list:[],
  		items:[]
  	}
  },
  async asyncData( {$axios} ){
  	let res = await $axios.get('http://testapi.xuexiluxian.cn/api/slider/getSliders');
  	let list = res.data.data.list;
  	return {
  		list
  	}
  }
}
</script>

二、fetch

fetch是页面组件和components目录中的组件都可以用,但是页面组件不会用的,都是在components里面去用的,你可以直接请求接口然后渲染数据。

注意:fetch中可以使用this

<template>
	<div>
		这是news
		<ol>
			<li v-for='item in items' :key='item.id'>
				{{item.imageName}}
			</li>
		</ol>
	</div>
</template>
<script type="text/javascript">
export default{
	data () {
		return {
			items:[]
		}
	},
	async fetch(  ){
		let res = await this.$axios.get('http://testapi.xuexiluxian.cn/api/slider/getSliders');
	  	let items = res.data.data.list;
	  	this.items = items;
	}
}
</script>

上面的代码,是直接请求接口渲染数据的。但是正常使用是组件请求接口把数据给vuex状态树,然后再做其他操作。