在react中使用mockjs的方法你知道吗

目录
  • 介绍
  • 安装&卸载&引入
  • 基础语法&规范
    • 7种生成规则
    • 生成规则和属性值value的关系
    • 占位符@
  • 模拟接口
  • 总结

介绍

mock意为“模仿”或"模拟",简单来说,就是造数据,造你想要的几乎任何数据,包括api和通过api返回的数据。

在写完项目进行自测,或者写页面需要数据 但是又不想单独开个后端,这时候就可以用mockjs来实现返回随机数据。

官网http://mockjs.com/

官方文档https://github.com/nuysoft/Mock/wiki

示例文档http://mockjs.com/examples.html

安装 & 卸载 & 引入

// 安装
npm i mockjs
// 卸载
npm uninstall mockjs
// 项目中引入
import Mock from 'mockjs'

基础语法 & 规范

Mock.mock

造数据,需要使用到mock方法:

Mock.mock(xxx)
// 这里面的xxx就是要通过mock来模拟的数据

每个被伪造的数据,都包含3部分:

  • 属性名 name
  • 生成规则 rule
  • 属性值 value

比如:

const data = Mock.mock({
    code: '0',
    msg: 'success',
    'list|5': [{ name: '@name', age: '@integer(18, 25)'}]
})

这里的code , msg , list 都是属性名,其中list和msg都是字符串,list是数组

code和msg的数据过于简单,所以生成规则在这里省略了,

而list对应的生成规则是|5,意思是生成一个数组,里面包含5个元素

这里的'0' , 'success' 和 [{ name: '@name', age: '@integer(18, 25)'}]就是他们各自对应的值。

打印一下生成的结果看看:

console.log(data)
/*********结果如下*************/
{
    "code": "0",
    "msg": "success",
    "list": [
        {
            "name": "Nancy Lewis",
            "age": 18
        },
        {
            "name": "Gary Wilson",
            "age": 25
        },
        {
            "name": "Shirley Gonzalez",
            "age": 22
        },
        {
            "name": "Mark Moore",
            "age": 24
        },
        {
            "name": "Richard Gonzalez",
            "age": 22
        }
    ]
}
// 另外,多次打印可以看出,每次结果都是不一样的,数据是随机的。

从上面的例子可以得知,生成规则是可选的,非必须的

如果存在生成规则,那么属性名和生成规则之间需要用|隔开

7种生成规则

'name|min-max': value

// 表示value值重复的次数,最少min次,最多max次
const data = Mock.mock({
    'list|1-5': ['hello-']
})
// 得到的结果可能是:
[
    "hello-",
    "hello-",
    "hello-",
    "hello-",
    "hello-"
]
// 也可能是:
[
    "hello-",
    "hello-",
    "hello-"
]
// hello-随机重复1-5次作为结果

'name|count': value

// value固定重复count次
const data = Mock.mock({
    'list|2': ['hello-']
})
// 得到的结果是:
[
    "hello-",
    "hello-"
]

'name|min-max.dmin-dmax': value

// 当value 是数字型时,生成一个浮点数,
// 浮点数的整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位。
// 生成的值和初始写的value值的大小无关,value的初始值只是用来确定数据类型
const data = Mock.mock({
    'num1|1-100.1-3': 1
})

生成的结果可能是:

也可能是:

'name|min-max.dcount': value

// 当value 是数字型时,生成一个浮点数,
// 浮点数的整数部分大于等于 min、小于等于 max,小数部分保留dcount位。
// 生成的值和初始写的value值的大小无关,value的初始值只是用来确定数据类型

'name|count.dmin-dmax': value

// 当value 是数字型时,生成一个浮点数,
// 浮点数的整数部分等于count,小数部分保留 dmin 到 dmax 位。
// 生成的值和初始写的value值的大小无关,value的初始值只是用来确定数据类型

'name|count.dcount': value

// 当value 是数字型时,生成一个浮点数,
// 浮点数的整数部分是count,小数部分保留dcount位。
// 生成的值和初始写的value值的大小无关,value的初始值只是用来确定数据类型

'name|+step': value

// 当value为数字时,初始值为value,每次得到的结果会自增1

生成规则和属性值value的关系

属性值是布尔值

'name|1': value
// 当value是true或者false时
// 最终结果会返回一个布尔值,返回true的概率是1/2,返回false的概率也是1/2
'name|min-max': value
// 当value是一个表示布尔值的结果时,
// 会随机生成一个布尔值,值为 value 的概率是 min / (min + max),
// 值为 !value 的概率是 max / (min + max)

属性值是对象 Object

'name|count': object
// 从属性值 object 中随机选取 count 个属性
'name|min-max': object
// 从属性值 object 中随机选取 min 到 max 个属性

属性值是数组 Array

'name|1': array
// 从属性值 array 中随机选取 1 个元素,作为最终值。
'name|+1': array
// 从属性值 array 中顺序选取 1 个元素,作为最终值。
'name|min-max': array
// 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
// 'name|count': array
通过重复属性值 array 生成一个新数组,重复次数为 count。

属性值是正则表达式 RegExp

// 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串
Mock.mock({
    'regexp1': /[a-z][A-Z][0-9]/,
    'regexp2': /\w\W\s\S\d\D/,
    'regexp3': /\d{5,10}/
})
// 结果可能是:
{
    "regexp1": "pJ7",
    "regexp2": "F)\fp1G",
    "regexp3": "561659409"
}

占位符@

占位符 引用的是 Mock.Random 中的方法,

这跟vue中的v-on:click省略成@click很像。可以简单理解为Mock.Random的缩写。

@后面跟上Mock.Random的一些固定方法,用来生成随机数据。

用法示例:

// 比如我们现在要随机生成一个中文人名
const data = Mock.Random.cname()
// 结果:
// data: 赵丽

改成占位符的方法就是:

const data = Mock.mock('@cname')
// 结果:
// data:  张秀兰

这里的cname就是Mock.Random的一个方法,表示获取随机的中文人名。

这里有一张表格,包含了Mock.Random的方法,并进行了简单的分类:

方法名前面带c的,都是用来获取中文相关的数据的。比如@name用来生成随机的英文名,而@cname就是用来生成随机的中文名。

另外,这些方法还可以带参数,以下有一些例子:

import Mock from 'mockjs'
let basicData = Mock.mock({
    'list|1-100': [{
        'id|+1': 1,
        'isBoolean': '@boolean(10, 0, true)',//百分之百的true
        'naturalNumber': '@natural(1, 1000)', //大于等于零的整数
        'integer': '@integer(0)', //随机整数
        'float': '@float(1, 100, 3, 6)', //随机浮点数,
        'character': '@character("upper")', //一个随机字符
        'string': '@string("lower", 5, 20)', //一串随机字符串
        'range': '@range(1, 10, 2)', //一个整形数组,步长为2
    }]
});
// console.log(basicData);
let Date = Mock.mock({
    'dateList|10': [{
        'date': '@date',
        'date-yyyy-MM-dd': '@date(yyyy-MM-dd)',
        'date-yy-MM-dd': '@date(yy-MM-dd)',
        'date-y-MM-dd': '@date(y-MM-dd)',
        'date-y-M-d': '@date(y-M-d)',
        'line-through': '------------------------------------------------',
        'timessss': '@time', //随机的时间字符串,
        'time-format': '@time()', //指示生成的时间字符串的格式, default: 'HH: mm: ss',
        'time-format-1': '@time("A HH:mm:ss")',
        'time-format-2': '@time("a HH:mm:ss")',
        'time-format-3': '@time("HH:mm:ss")',
        'time-format-4': '@time("H:m:s")',
        'datetime': '@datetime("yyyy-MM-dd A HH:mm:ss")', //返回一个随机的日期和时间字符串
        'dateNow': '@now("second")' //获取当前完整时间
    }]
});
// console.log(Date);
let imageList = Mock.mock({
    'imageList|5': [{
        'id|+1': 1,
        'img': '@image',//生成一个随机的图片地址,
        'img-1': '@image("200x100", "#000", "#fff", "png", "Mock.js")', //生成一个200*100, 背景色#000,前景色#fff, 格式png, 文字mock.js的图片
    }]
})
// console.log(imageList);
let paragraph = Mock.mock({
    'paragraphList|5': [{
        'id|+1': 1,
        'paragraph1': '@cparagraph(2)', //生成一段2句话的中文文本,
        'paragraph2': '@paragraph(3)', //生成一个3句话的英文文本
        'title': '@title', //随机生成一个英文标题
        'ctitle': '@ctitle', //随机生成一个中文标题
    }]
})
// console.log(paragraph);
let name = Mock.mock({
    'nameList|5': [{
        'id|+1': 1,
        'name': '@name', //英文名,
        'cname': '@cname', //中文名
    }]
})
// console.log(name);
let webList = Mock.mock({
    'webList|5': [{
        'id|+1': 0,
        'url': '@url("http", "baidu.com")', //url: http://www.baidu.com
        'protocol': '@protocol', //随机生成一个url协议
        'domain': '@domain', //随机生成一个域名,
        'email': '@email', //随机生成一个邮箱地址,
        'ip': '@ip' //随机生成一个ip地址
    }]
})
// console.log(webList);
let address = Mock.mock({
    'addressList|5': [{
        'id|+1': 1,
        'region': '@region', //生成一个大区
        'province': '@province', //生成一个省份
        'city': '@city', //生成一个市
        'country': '@country', //一个县
        'zip': '@zip', //邮政编码
    }]
})
console.log(address)

此外,有完整的官方示例文档:http://mockjs.com/examples.html

哪个方法不知道怎么用了, 就可以直接去示例文档中查看。

模拟接口

Mock.mock( rurl, rtype, data)

介绍以下三个参数:

  • rurl:请求路径,可以是相对路径,也可以是绝对路径
  • rtype:请求方式,比如get post put delete等
  • data:要返回的模拟数据

举例:

import React, {useEffect} from 'react'
import Mock from 'mockjs'
import axios from 'axios'
Mock.mock('/mock/usermsg', 'get', {
    code: '0',
    msg: 'success',
    'list|5': [{ name: '@name', age: '@integer(18, 25)'}]
})
const DemoMock = () => {
    useEffect(async () => {
        const res = await axios('/mock/usermsg')
        console.log(res.data)
    })
    return <h3>hello react</h3>
}
export default DemoMock

返回的结果:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 在Vue中使用mockjs代码实例

    前言 前后端分离的开发模式,前端需要向后端请求数据(ajax请求),但实际开发过程中,前后端会约定一份接口文档,但前后端开发进度并不一致,当后端没有完善接口功能时,前端需要在本地模拟数据返回,此时需要使用到mockjs. 安装 npm install mockjs --save-dev 目录结构 配置 1.api下的config.js:配置axios的拦截处理 import axios from 'axios' // 创建一个axios实例 const service = axios.creat

  • Vue之使用mockjs生成模拟数据案例详解

    目录 在项目中安装mockjs 在Vue项目中使用mockjs的基本流程 Mock语法规范 数据模板定义规范(Data Template Definition,DTD) 数据占位符定义规范(Data Placeholder Definition,DPD) Mock.mock() Mock.Random() 在项目中安装mockjs 在项目目录下执行以下安装命令 npm install mockjs --save 在Vue项目中使用mockjs的基本流程 安装完成后,在项目src/utils目录下

  • 利用vue + koa2 + mockjs模拟数据的方法教程

    前言 首先说一下这是本人第一次分享东西第一次写,写的不好或者有错误的请大家多包涵支出错误共同进步,好了,话不多说了,来一起看看详细的介绍吧. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰富 4.通过随机数据,模拟各种场景. 等等优点. 第一步 安装vue-cli项目 不多说网上一大把 需要的朋友们参考这篇文章:http://www.jb51.net/article/118987.htm ,介绍的非常详细.

  • vue-cli项目中使用Mockjs详解

    背景 前端在早期jQuery时代时,前端功能和后端工程基本上都是合在一起,典型的就是常见的maven工程下面的webapp目录包含前端各类静态资源文件. 这个时候,我们总是会遇到这些问题: 老大,接口文档还没输出,我的好多活干不下去啊! 后端小哥,接口写好了没,我要测试啊! 测试时间不够啊,就要发版了,今天难道我有看明天的太阳升起? 诸如种种,就是一句话:劳资,再也不要指望你们了! node出现之后,准确的说是前后端分离之后,前端迫切需要一种机制,不在需要依赖后端接口开发.经过这几年的发展,有好

  • mockjs+vue页面直接展示数据的方法

    最近想往数据库里导一些数据,同事推荐了mock,了解一下觉得不错,现将在vue用的mock贴上来 写在前默认看此文的盆友都是有vue基础的哟~~ 一.导读 将 mockjs 的数据直接展示在 vue 页面上 mockjs官网链接 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰富 4.通过随机数据,模拟各种场景. 等等优点. 二.安装mockJS //安装mockJS npm install mockjs 不

  • 在react中使用mockjs的方法你知道吗

    目录 介绍 安装&卸载&引入 基础语法&规范 7种生成规则 生成规则和属性值value的关系 占位符@ 模拟接口 总结 介绍 mock意为“模仿”或"模拟",简单来说,就是造数据,造你想要的几乎任何数据,包括api和通过api返回的数据. 在写完项目进行自测,或者写页面需要数据 但是又不想单独开个后端,这时候就可以用mockjs来实现返回随机数据. 官网:http://mockjs.com/ 官方文档:https://github.com/nuysoft/Moc

  • React中Ref 的使用方法详解

    本文实例讲述了React中Ref 的使用方法.分享给大家供大家参考,具体如下: React中Ref 的使用 React v16.6.3 在典型的React数据流中,props是父组件与其子组件交互的唯一方式.要修改子项,请使用new props 重新呈现它.但是,在某些情况下,需要在典型数据流之外强制修改子项.要修改的子项可以是React组件的实例,也可以是DOM元素.对于这两种情况,React都提供了api. 何时使用refs refs有一些很好的用例: 1.文本选择或媒体播放. 2.触发势在

  • React中useState的使用方法及注意事项

    目录 一.基本使用 第一个问题:setCount修改值时它是同步还是异步? 第二个问题:连续调用 setCount会发生什么? 二.注意事项 1.复杂变量的修改 2.异步操作获取更新的值 总结 一.基本使用 useState是 react 提供的一个定义响应式变量的 hook 函数,基本语法如下: const [count, setCount] = useState(initialCount) 它返回一个状态和一个修改状态的方法,状态需要通过这个方法来进行修改: initialCount 是我们

  • React 中的 useContext使用方法

    目录 什么是上下文呢? useContext使用的方法: 1.要先创建createContex 2.Provider 指定使用的范围 3.最后使用useContext useContext就是上下文 什么是上下文呢? 全局变量就是全局的上下文,全局都可以访问到它:上下文就是你运行一段代码,所要知道的所有变量 useContext使用的方法: 1.要先创建createContex 使用createContext创建并初始化 const C = createContext(null); 2.Prov

  • React中使用UMEditor的方法示例

    最近项目中需要使用富文本编辑器,参考了运营小姐姐日常使用平台上的编辑器,最后考虑采用百度的UMEditor.因为轻量,功能和配置简单,没有很多定制化的功能,所以没采用UEditor.不过我后续会出一篇文章将UEditor的二次开发. umeditor的引入 组件设计 首先看一下组件大致的内容: 1.组件props: 2.组件关键的成员属性: 3.简单的render: 4.UMEditor的实例化 UMEditor源码里需要改动的主要就是图片的请求了,配置中的imgUrl我传的是一个方法,这个方法

  • React中props使用教程

    目录 1. children 属性 1.1 React.cloneElement方法 1.2 React.Children.map方法 2. 类型限制(prop-types) 3. 默认值(defaultProps) 1. children 属性 概述: children 属性,表示组件标签的子节点,当组件标签有子节点时,props 就会有该属性,与普通的 props 一样,其值可以是任意类型.单标签和双标签中没有数据就没有此属性. 语法: # 父组件 class App extends Rea

  • 深入理解React中es6创建组件this的方法

    首发于:https://mingjiezhang.github.io/. 在JavaScript中,this对象是运行时基于函数的执行环境(也就是上下文)绑定的. 从react中的demo说起 Facebook最近一次更新react时,将es6中的class加入了组件的创建方式当中.Facebook也推荐组件创建使用通过定义一个继承自 React.Component 的class来定义一个组件类.官方的demo: class LikeButton extends React.Component

  • React中jquery引用的实现方法

    在React中引用Jquery比较好玩,获取元素的数据更多 1.引入方法举例: import $ from 'jquery'; import { Button } from 'antd'; class testJquery extends React.Component { constructor(props) { super(props); this.selectElement = this.selectElement.bind(this); } render() { return( <div

  • 在 React、Vue项目中使用SVG的方法

    在一些现代的扁平化设计网站,特别是移动端网站,经常会包含许多简单而清晰的小图标,例如网站图标.用户的默认头像.移动端网页首页底部固定的切换栏等,这些小图标一般都是由美工做好,可能会放到精灵图上,前端再进行裁切展示. 而实际上,这些简单的小图标完全没必要让美工来做,前端完全可以通过 svg使用代码把这些简单的图标画出来,并且,因为这些图标是用代码描述出来的,所以如果想要修改这些图标,例如改变图标的颜色.图标的形状.大小等,都只是改几行代码的事情,非常简单,根本无需美工返工重做. 本文不是阐述如何利

  • React中this丢失的四种解决方法

    发现问题 我们在给一个dom元素绑定方法的时候,例如: <input type="text" ref="myinput" accept = "image/*" onChange = {this.selectFile} /> React组件中不能获取refs的值,页面报错提示:Uncaught TypeError: Cannot read property 'refs' of null or undefind 小栗子 import Re

随机推荐