<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
mock意為“模仿”或"模擬",簡單來說,就是造資料,造你想要的幾乎任何資料,包括api和通過api返回的資料。
在寫完專案進行自測,或者寫頁面需要資料 但是又不想單獨開個後端,這時候就可以用mockjs來實現返回亂資料。
官方檔案: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 } ] } // 另外,多次列印可以看出,每次結果都是不一樣的,資料是隨機的。
從上面的例子可以得知,生成規則是可選的,非必須的
如果存在生成規則,那麼屬性名和生成規則之間需要用|隔開
'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
屬性值是布林值
'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': /wWsSdD/, '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
返回的結果:
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45