全局配置
1 安装axios包 yarn add axios
2 src文件目录下新建文件夹api
3 api 下新建statecode.js
export default {
"-1": "系统繁忙",
"0": "请求成功",
"1001": "超级管理员只能有一个",
"1002": "用户已存在",
"1003": "两次密码不一致",
"1004": "手机号错误",
"1005": "邮箱格式错误",
}
3 api下新建config.js
module.exports = {
base: "http://demo.port.net:8000"
};
4 api下新建index.js
import codes from './statecode.js';
import login from './login.js';
import list from './list.js';
export default {
stateCode: codes,
...login,
...list,
}
5 api下新建login.js,list.js等每个页面的接口文件
import axios from 'axios';
import { base } from "./config.js";
import cookie from 'react-cookies'
export default {
//创建密码
async codeCreate(params) {
return axios.post(`${base}/api/wechat/code/${localStorage.getItem('listid')}`, params, {
headers: {
"token": cookie.load('usertoken')
}
}).then((res) => {
return res.data;
}).catch((error)=>{
message.error('服务器出错')
});
},
}
6 在相关页面对接口
读懂接口文档
/api/wechat/qrcode/:officialId/:qrcodeId 带冒号,动态数据:`${base}/api/wechat/qrcode/${localStorage.getItem("listid")}/${params.id}` //这列的:qrcodeId需要使用${params.id}动态写入,params即数组
/api/wechat/statistics/:officialId/qrcode 不带冒号,静态的:`${base}/api/wechat/statistics/${localStorage.getItem("listid")}/qrcode` //这里的qrcode直接写上去就可以
参数问题
request<T = any>(config: AxiosRequestConfig): AxiosPromise<T>; //request 一个参数 config
get<T = any>(url: string, config?: AxiosRequestConfig): AxiosPromise<T>; //get 两个参数 url config
delete(url: string, config?: AxiosRequestConfig): AxiosPromise; //delete 两个参数 url config
head(url: string, config?: AxiosRequestConfig): AxiosPromise; //head 两个参数 url config
post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosPromise<T>; //post 三个参数 url data config
put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosPromise<T>; // put 三个参数 url data config
patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosPromise<T>; // patch 三个参数 url data config
参数解释 :url —— 请求地址
data——发送给服务器的请求数据
config——配置,一般都是固定格式
举个栗子:
export default{
async codeDeisgn(params){
return await axios.put(`${base}/api/wechat/code/${localStorage.getItem("listid")}/${params.id}`, params,{ //url data
headers:{ //config 一般都是固定格式
"token":cookie.load("usertoken")
}
}).then((res)=>{
return res.data;
});
},
async qrcodeExtend(params){
return axios.post(`${base}/api/wechat/code/${localStorage.getItem('listid')}/${params.id}/extend`,{},{ ////这里data就没有传参,而是用{}表示
headers:{
"token":cookie.load("usertoken")
}
}).then((res)=>{
return res.data;
});
},
}
注意:需要的参数,一个都不少,data如果不需要传,设置为{}都行,也不能不传
受控组件和不受控组件
在HTML中,<textarea> 的值是通过子属性设置的。在React中,需要通过value设置。我们可以通过添加事件属性onChange监听内容的变化,onChange会在下列情况下被触发:
input或者textarea的内容改变
input的checked状态改变
select的状态改变
【受控组件】
设定了value的input就是一个受控组件。input里会一直展现这个值,用户的任何输入都是无效的。如果你想随着用户的输入改变,使用onChange事件,或者将value改为defaultValue
【非受控组件】
value没有值或者值设为null的input是一个不受控组件。用户的任何输入都会反映到输入框中
这个时候也可以监听onChange事件,内容的改变也会触发事件。
可以通过defaultValue给input设置默认值