web前端全栈0基础到精通(祺)vue 08

news/2024/7/10 2:08:40 标签: vue, javascript, 前端, node.js, vue.js

一、数据交互(axios)

1.1概念

axios : 读音  阿克西奥斯河

它并不是vue独有的插件。
axios是一个HTTP的库,基于promise创建的
一般vue中或者react中进行数据交互,我们可以调用这个库

易用、简洁且高效的http库(基于promise创建的)

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

1.2官网地址

中文文档: http://www.axios-js.com/
npm : https://www.npmjs.com/package/axios

1.3特点

从浏览器中创建 XMLHttpRequests
从 node.js 创建 http 请求
支持 Promise API
拦截请求和响应
转换请求数据和响应数据
取消请求
自动转换 JSON 数据
客户端支持防御 XSRF(跨站请求伪造)

1.4安装

npm install axios
+ axios@0.21.1

1.5 直接调用方法(配置对象)api方法

axios({
	url:'//要链接的地址',
	method:'get/post',//交互方式 如果是get可以省略
	//如果你是get请求
	params:{
	  //要传入的参数
	}
	//如果是post请求
	data:{
		//要传入的参数
	}
})
.then((res)=>{
	//res 成功之后的响应
})
.catch((err)=>{
	//err 错误响应
	//http状态码 非200的时候进入
})

1.6 get()方法

axios.get('url地址',{
	params:{
		//要传入的参数
	}
})
.then((res)=>{
	//res 成功之后的响应
})
.catch((err)=>{
	//err 错误响应
	//http状态码 非200的时候进入
})

1.7post()方法

axios.post('url地址',{
	//要传入的参数
})
.then((res)=>{
	//res 成功之后的响应
})
.catch((err)=>{
	//err 错误响应
	//http状态码 非200的时候进入
})

1.8 async await方法

强制转同,按照我的顺序调取接口
async function getUser() {
  try {
  //成功时候的执行
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
  //错误拦截
    console.error(error);
  }
}

1.9 局部调用axios

<template>
  <div>
    <h1>axios案例</h1>
  </div>
</template>

<script>
//引入核心库
import axios from "axios";
export default {
  data() {
    return {};
  },
  mounted() {
    //页面一加载调用接口
    // axios({
    //     url:'http://jsonplaceholder.typicode.com/posts',
    // })
    // .then(res=>{
    //     console.log(res,'成功之后的响应');
    // })
    // .catch(err=>{
    //     console.log(err,'错误捕获');
    // })
    //axios.get()
    axios
      .get("http://jsonplaceholder.typicode.com/posts")
      .then((res) => {
        console.log(res, "成功之后的响应");
      })
      .catch((err) => {
        console.log(err, "错误捕获");
      });
  },
};
</script>

<style scoped></style>

1.10 全局调用axios

main.js

//引入axios核心库
import axios from 'axios'
// 把当前核心库挂载到Vue原型上
Vue.prototype.$axios = axios

1.11 如何最新版的脚手架中解决跨域问题

  • 上线之后跨域问题谁解决???
后端去解决或者,服务器解决
  • 创建自定义配置项
创建文件====vue.config.js

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。
  • 官方配置项文档
https://cli.vuejs.org/zh/config/#%E5%85%A8%E5%B1%80-cli-%E9%85%8D%E7%BD%AE
  • 开发环境下解决跨域问题
    vue.config.js
//这就是vue的配置项
module.exports ={
    devServer:{
        //解决跨域问题配置
        //配置代理
        proxy:'你要解决跨域的地址'
    }
}

注意点: !!!!配置文件发生变化一定要重启前端服务!!!

三、Vuex(状态管理)

3.1 概念

vuex是状态管理。指的是多个组件共享一个数据,那么我们可以创建一个仓库统一去管理当前的所有数据。也就是共享仓库的概念。

-----------------------
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化


------------------
vuex是响应式的数据变化。一个组件修改了值,所有的地方都跟着发生变化

3.2 官网

https://vuex.vuejs.org/zh/

3.3使用场景

vuex 适应于大型的单页应用

如果你的项目不够复杂,你根本想不到用vuex,那就别用!!!

如果你发现,用它真香,那就自然而然调用

它的根本目的:用于管理数据(多个组件共享一个数据!!!)

3.4 安装

一、创建项目的时候,就选择安装vuex 
它会把默认的配置都给你配好,包括文件和文件夹

二、通过自己下载并配置
npm install(i) vuex
并没有默认的文件以及文件夹

3.5 配置基础仓库

store=>index.js

//引入核心库
import Vue from 'vue'
//引入状态库
import Vuex from 'vuex'

//Vuex是个对象,里面有仓库属性和辅助性函数
//new Vuex.Store() 实例化之后得到了仓库上所有的属性和方法

//调用插件
Vue.use(Vuex)

// console.log(new Vuex.Store(),'????');
export default new Vuex.Store({
    state:{//唯一的数据管理
        name:'巧克力1'
    }
})

main.js

//引入封装好的仓库
import store from './store'

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

3.6 注意项

vuex 不能刷新,因为一刷新就回到初始状态


面试题:
vuex和离线存储有什么区别????
相同点:都可以进行数据的存储
不同点:vuex一变化,其他使用数据的地方都跟着发生变化。离线存储数据发生变化,必须要刷新(重新取值,它没有响应式)才能获取新的数据。但是vuex一刷新就回到初始状态。

真正做项目的过程中结合使用!!!

3.7 Vuex的核心属性

  • state

    • 概念
    state是唯一数据源,用来管理所有的层级数据
    
    • 使用方式
    state:{
    	属性值:''
    }
    
  • mutations

    • 概念
    修改state的唯一方式
    
    • 使用方式
    视图
    通过commit去触发一个mutation
    this.$store.commit('mutation_TYPE',payload)
    
    仓库
    mutations:{
    	mutation_TYPE(state){
    		//可以修改state
    	}
    }
    
    
  • actions

    • 概念
    它和mutation很类似
    一、它不能直接修改state
    二、它可以操作异步方法
    
    • 使用方式
    视图
    通过dispatch去触发一个action
    this.$store.dispatch('action_TYPE',payload)
    
    仓库
    mutations:{
    	mutation_TYPE(state,payload){
    		//可以修改state
    	}
    }
    
    actions:{
    	action_TYPE(context){
    	 	//这个context代表对象,对象中包含了属性和方法
    	 	context.commit('mutation_TYPE',payload)
    	}
    	或者
    		action_TYPE({commit}){
    	 	commit('mutation_TYPE',payload)
    	}
    }
    
    
  • modules 模块

    • 概念
    它是为了解决state臃肿的问题
    
  • getters

    • 概念
    具有缓存效果
    做为视图层和state属性之间的中间层存在
    
    • 用法
    getters:{
    	名字(state){
    		return state.属性
    	}
    }
    

3.8 辅助性函数

3.8.1state
它是vuex的唯一数据源 

mapState(很少用!!!)

import {mapState} from 'vuex'

computed:{
	...mapState(['仓库中state值'])
	...mapState({
		想要渲染的名字:state=>state.值
	})
}
3.8.2getters
相当于计算属性。它作为,state和视图的中间层存在。它具有缓存效果

mapGetter

import {mapGetters} from 'vuex'

computed:{
	...mapState(['仓库中getters值1','仓库中getters值2',...])
	...mapState({
		想要渲染的名字:geter=>getter.值
	})
}
3.8.3 mutations
它是修改state的唯一方式,同步的
mapMutations

import {mapMutations} from 'vuex'

methods:{
	...mapMutations(['mutations名字一致']),
	...mapMutations({
		'自定义函数名称':'mutations名字'
	})
}
3.8.4 actions
它不能直接修改state,它只能commit一个mutations
它可以操作异步方法
mapActions

import {mapActions} from 'vuex'

methods:{
	...mapActions(['actions名字一致']),
	...mapActions({
		'自定义函数名称':'actions名字'
	})
}
  • 概念
作者担心你直接触发行动提交mutation比较麻烦。
它在代码上给你进行了优化。用的就是辅助性函数

错误集锦

unknown mutation type: changename
一、mutation名字不对
二、没有设置mutation名字
unknown action type: changenum
一、action名字不对
二、没有设置action名字

http://www.niftyadmin.cn/n/508984.html

相关文章

web前端全栈0基础到精通(祺)vue 09

一、UI框架 1.1UI框架之PC端&#xff08;elementUI&#xff09; 官网地址 https://element.eleme.cn/#/zh-CN安装 npm install(i) element-uielement-ui2.15.1全局引入UI框架 main.js //引入UI库 import ElementUI from element-ui //全局引入css样式 import element-ui/…

vue数据可视化界面,智慧图表。Echarts,以及git

一、数据图表 一张图表胜过千万句话 1.1HighChart 概念 兼容 IE6、完美支持移动端、图表类型丰富、方便快捷的 HTML5 交互性图表库下载 一、通过CDN https://code.highcharts.com.cn/index.html 二、通过NPM下载&#xff08;用的比较多&#xff09; npm install highchart…

vue中TS的应用

TS(typescript) ts: typescript ,它是js超集&#xff08;包含js所有的语法&#xff0c;在基础上增加了数据类型定义&#xff09; 它最主要做的一件事&#xff0c;就是数据类型验证。 js是弱类型语言&#xff0c;java是强类型语言 let a 123,a 就是number类型。let a 123,a就…

react基础,脚手架,组件创建,组件通信

React基本知识 react并不是框架&#xff0c;它只是一个类库。类似于jquery。它没有设计模式&#xff0c;它是单项数据流。它大部分都是原生js的写法。 如果一定非要把它跟MVC中V 是一样的。它更多的是操作视图&#xff08;view&#xff09; react是脸书&#xff08;Facebook&am…

react生命周期,ref,表单,路由,路由传参接参,

一、生命周期 初始化时期 constructor 初始化 render 渲染 componentDidMount 挂载完成 //大量的异步操作以及接口的调用&#xff0c;我们会在componentDidMount中完成更新期 首先判断是否含有shouldComponentUpdate. 如果有&#xff0c;根据返回值状态&#xff0c;return …

react的UI框架Antd,axios,状态管理

UI框架&#xff08;pc和移动 Antd&#xff09; 5.1 设计体系官网 https://ant.design/index-cnhttps://ant.design/docs/react/introduce-cn5.2 概念 antd 是基于 Ant Design 设计体系的 React UI 组件库&#xff0c;主要用于研发企业级中后台产品。5.3✨ 特性# &#x1f3…

微信小程序开发(详解)-保证学的明明白白的

微信开发简介 1.微信开发概述 概述 &#xff08;1&#xff09;微信开发即微信公众平台开发&#xff0c;将企业信息、服务、活动等内容通过微信网页的方式进行表现&#xff0c;用户通过简单的设置&#xff0c;就能生成微信网站。 &#xff08;2&#xff09;通俗的说&#xff…

微信小程序WXML、WXSS、事件系统、WXS、组件(详解)--看完就会写微信小程序。前面还有基础教程

三、视图层概述 、 框架的视图层由 WXML 与 WXSS 编写&#xff0c;由组件来进行展示。将逻辑层的数据反映成视图&#xff0c;同时将视图层的事件发送给逻辑层。WXML(WeiXin Markup language) 用于描述页面的结构。WXS(WeiXin Script) 是小程序的一套脚本语言&#xff0c;结合 …