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不会发起请求。

posted @ 2023-05-23 13:59  破男孩  阅读(370)  评论(0编辑  收藏  举报