react+mock
之前写过一篇react项目添加mock的文章,在文章中说的mock代码是打包配置的时候写入的,这种方式导致每次修改mock数据后都需要重新启动服务才能获取到新的mock数据。
今天使用另外一种方式来实现开发过程中的数据mock。
在项目中安装 axios和mock.js两个框架
然后在webpack配置文件中配置一个环境变量 REACT_APP_MOCK='true',这个环境变量的目的是为了在业务代码中使用,只有匹配了才使用mock数据,否则使用mock数据。
1、如何添加环境变量
2、新建 src/mocks/apis/hooks.js 文件存放mock数据,文件内容:
import Mock from 'better-mock' export function hookMock(){ Mock.mock('/mock/api/hook', { success: '@boolean(1, 9, false)', errorCode: '@integer(0, 10)', message: '@cword(2,10)', data: { a: '样', userName: '@cword(2,4)', userId: '@integer(1000, 9999)', 'list|1-10': [{ 'id|+1': 1, 'email': '@EMAIL' }] }, }) }
2、代码中使用mock数据
import React, {useState, useEffect} from 'react'
import axios from 'axios'
import {hookMock} from '@/mocks/apis/hooks'
if(process.env.REACT_APP_MOCK === 'true'){
hookMock();
}
function Hooks(props){ // 使用一个普通变量存储值,在事件里面获取到的一定不是你想要的值,因为,每次渲染都会重新声明
useEffect(() => {
console.log('发起请求---')
axios.get('/mock/api/hook').then((res)=>{
console.log('res:', res)
})
}, []);
return <>
mock数据
</>
}
export default Hooks;
其中的 @ 是webpack配置的 src目录的别名
使用webpack配置实现的mock和业务中引入mock的差别:
1、webpack配置实现的mock每次修改后,都需要重新启动,才能获取到新的数据,而业务中引入的mock则不需要。
2、webpack配置实现的mock会发出ajax请求,而业务中引入的mock不会发起请求。

浙公网安备 33010602011771号