react中通过axois和mockjs模拟数据请求

安装mockjs和axios
  • yarn add mockjs
  • yarn add axios
    mockjs用法参照官方文档
创建mock文件夹并在文件夹下创建mock.js

mock.js

const Mock = require('mockjs')

module.exports = Mock.mock('/user', 'get', options => {
  const ret = Mock.mock({
    'user': { userName: '@cname' }
  })
  return {
    status: 200,
    data: ret
  }
})
创建组件并引用写好的mock.js和axios

Demo.jsx

import React, { Component } from "react";
import axios from "axios";
import '../mock/mock'

export default class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = {
     
    };
  }

  componentDidMount(){
    axios.get('/user').then(res=>{
      console.log(res.data,'resData');
    })
  }
  
  render() {
    const { treeData } = this.state;
    return (
      <div>
        <h1>123</h1>
        <button></button>
      </div>
    );
  }
}

  • log输出结果如图
    在这里插入图片描述
    遇到的问题
  • 在mock.js中开始使用的import来引用mockjs即
import Mock from 'mockjs'
module.exports = Mock.mock('/user', 'get', options => {
  const ret = Mock.mock({
    'user': { userName: '@cname' }
  })
  return {
    status: 200,
    data: ret
  }
})
  • 页面产生如下报错
    在这里插入图片描述
    产生此错误的原因是通过import引入的,而使用module.exports导出,正确的做法应该是如果想要通过module.exports导出,就应该使用require加载模块,即上面的形式
创建带有参数的请求

mock.js

const Mock = require('mockjs')
module.exports = Mock.mock('/list', 'get', options => {
  console.log(options,'options');
  const page = JSON.parse(options.body).page
  const ret = Mock.mock({
    'list|20': [{ 'id|+1': 1, name: '@cname' }]
  })
  if (page > 3) {
    return {
      status: 200,
      data: []
    }
  }
  return {
    status: 200,
    data: ret
  }
})

Demo.jsx

import React, { Component } from "react";
import axios from "axios";
import "../mock/mock";

export default class LoadTreeSelect extends Component {
  constructor(props) {
    super(props);
    this.state = {
      page: 1,
    };
  }
  getPageList = () => {
    this.setState({ page: this.state.page + 1 }, () => {
      axios
        .get("/list", {
          data: {
            page: this.state.page,
          },
        })
        .then((res) => {
          console.log(res, "reslIist有参数");
        });
    });
  };
  render() {
    const { treeData } = this.state;
    return (
      <div>
        <button onClick={this.getPageList}> 带有参数的请求</button>
      </div>
    );
  }
}
post请求

mock.js

const Mock = require('mockjs')
module.exports = Mock.mock('/add', 'post', options => {
  return {
    status: 200,
    ata: JSON.parse(options.body).data
  }
})

Demo.jsx

import React, { Component } from "react";
import axios from "axios";
import "../mock/mock";

export default class LoadTreeSelect extends Component {
  constructor(props) {
    super(props);
  }

  componentDidMount() {
    axios.post('/add',{
      data:{
        id:1,
        title:'title'
      }
    }).then(res=>{
      console.log(res,'post---res');
    })
  }
  render() {
    const { treeData } = this.state;
    return (
      <div>
        <h1>123</h1>
      </div>
    );
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值