备战面试!我用了十分钟学会Mock数据

134 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

日常的开发中,前端的页面已经写完后端的接口还没有写好,这种是经常出现的问题,所以Mock数据,是前端开发工程师必不可少技能,这篇文章让你学会在Vue或者React中使用Mock数据

1、下包mockjs和axios

yarn add mockjs -D
yarn add axios

2、新建Mock/index.js,如果模块多需要分模块,最后在index.js中导入即可

//index.js中的代码
import Mock from 'mockjs'
const data=Mock.mock('/mock/userInfo',{
'code':0,
'userInfo|5':[{ //声生成数组里五个对象,对象的字段如下
    'id':'@id', //ID为mock里的随机id
    'userName':'@cname', //名字为随机中文名
    'age|18-45':1, //年龄是18到45之间的随机数
    'gender|1':['男','女'], //性别是数组里的随机一项
    'addr':'@city(true)', //城市是mock里的随机城市
}],
'message':'获取成功'
})
export default data

使用mock的一些小技巧

//使用:'date':Mock.Random.time( format? )就可以
1. Random.boolean()   随机布尔值
2. Random.natural( min?, max? )  随机自然数 min-max之间
3. Random.integer( min?, max? )  随机整数min-max之间
4. Random.float()   随机浮点数
5. Random.character( pool? )   随机字母  pool对应有(lower[小写]/upper[大写]/number[数字]/symbol[符号]6. Random.string( pool?, min?, max? )   随机字符串
7. Random.range(start?, stop, step?)   随机范围数字组成的数组
8.  Random.date( format? )  随机日期
9.  Random.time( format? )  随机时间
10.  Random.datetime( format? )  随机日期+时间
11.  Random.now( unit?, format? )  当前时间
12.  Random.image( size?, background?, foreground?, format?, text? )  图片占位
13.  Random.dataImage( size?, text? )  生成base64格式图片
14.  Random.color()  随机颜色
15.  Random.rgb()  随机rgb颜色
16.  Random.rgba()   rgba颜色值
17.  Random.paragraph( min?, max? )   段落
18.  Random.sentence()
19.  Random.word( min?, max? )
20.  Random.title( min?, max? )
21.  Random.cparagraph( min?, max? )   中文段落
22.  Random.csentence( min?, max? )   中文句子
23.  Random.cword( pool?, min?, max? )  汉字
24.  Random.ctitle( min?, max? ) 标题
25.  Random.first() 姓
26.  Random.last()  名
27.  Random.name( middle? )  姓名
28.  Random.cfirst()  中文姓
29.  Random.clast()  中文名
30.  Random.cname()  中文姓名
31.  Random.url()  随机URL
32.  Random.domain()  随机域名
33.  Random.protocol()
34.  Random.email()  邮箱
35.   Random.region()
36.   Random.province()  省
37.   Random.city( prefix? )  市   (prefix是否带前缀省,值为boolean)
38.   Random.county( prefix? )  区县  (prefix是否带缀省,市)
39.   Random.increment( step? )  递增

3、axios的二次封装

mock要用得到axios发请求,所以我们可以对axios进行二次封装,顺便设置根地址
// 封装axios
import axios from 'axios'
const instance = axios.create({
baseURL: '/mock', //设置跟地址
timeout: 5000 //设置过期时间
})
// 添加请求拦截器
instance.interceptors.request.use(
function (config) {
// 在发送请求之前做些什么
config.headers.Authorization ='q8Jp1HkbtAjAlvO8Qj23jELYnyaWEp5v'
return config
},
function (error) {
// 对请求错误做些什么
return Promise.reject(error)
}
)
// 添加响应拦截器
instance.interceptors.response.use(
function (response) {
// 对响应数据做点什么
return response
},
function (error) {
// 对响应错误做点什么
return Promise.reject(error)
}
)
export default instance

4、在组件中导入mock.js和axios就可以使用了

import { useEffect, useState } from 'react' 
import './App.css'
import request from './axios'
import './mock'
function App () {
const [user,setUser] = useState([])
useEffect(()=>{
request.get('/userInfo',{dateType:'json'}).then((res)=>{
  setUser(res.data.userInfo)
})
},[])
return (
<div className='App'>
<ul>
{user.map(item=>(
  <li key={item.id}>
    <h3>姓名:{item.userName}===性别:{item.genter}===年龄:{item.age}===籍贯:{item.addr}</h3>
  </li>
))}
</ul>
 </div>
)
}
export default App

这样我们mock的数据就渲染到页面上了

image.png