我发现在Vue中使用Structs解决了几个最直接的问题,这些问题一直困扰着我。数据结构重用,避免复制粘贴样板代码。简单、快速的数据模拟,普通数据和模拟之间的切换非常方便。方便的是设置字段的初始值,不用每次使用都重新赋值。让字段有类型语义,让我一眼就能清楚地知道某个结构是干什么的。包含多层子结构的完整结构的一步直接初始化。解决上面的问题,只能用到Struct最基本的功能,其他的能力我们暂时不去深究,不然内容实在是太多了~~~先开始吧。想掌握更多能力的同学,请移步:https://rainforesters.github....在Vue中使用Struct,我们使用可重用的字段类型来定义某个组件的独特数据结构。允许字段具有相应的初始值。可以使用模拟数据并轻松切换回正常数据。直接进入代码进行预览。//user.vue用于显示用户信息//importrainforest-jsimport{wrapval,typedef,typeinit}from'rainforest-js'//导入已经定义的类型描述,我们可以复用它们import{Id,Name,Sex,Birthday,Avatar}from'./libtypes'exportdefault{data(){//定义数据结构constUserStruct=typedef({id:Id,name:Name,sex:Sex,birthday:Brithday,avatar:Avatar,})//初始化数据结构,字段会被初始化为对应类型的初始值//returntypeinit(UserStruct)//returntypeinit(UserStruct,{//name:'Amy',//不要使用初始值,直接赋值//})//或//可选,使用wrapval({'@mock':true})切换mock数据returntypeinit(UserStruct,wrapval({'@mock':true}))//returntypeinit(UserStruct,wrapval({'@mock':true},{//name:'Amy',//不使用mock值,直接赋值//}))},}如上所示,写入方式与以往普通数据相同big不同之处在于可重用性和语义性大大提高,不需要每次都赋字段初值,切换模拟数据非常方便。//comment.vue用户评论//importrainforest-jsimport{wrapval,typedef,typeinit,int32}from'rainforest-js'//导入已经定义的类型描述,我们可以重用它们import{Id,Name,Avatar,Text}from'./libtypes'exportdefault{data(){constCommentStruct=typedef({user:typedef({id:Id,name:Name,avatar:Avatar,}),text:Text,id:Id,praise:int32,})returntypeinit(CommentStruct,wrapval({'@mock':true}))},}如上所示,我们其实是复用了相同的字段类型,省去了很多麻烦,代码也很漂亮。可以积累沉淀的类型库在前面的代码中可以看到,我们定义了一个通用的类型库,它可以让我们复用很多类型。随着日常的发展,我们可以很简单的不断积累和存放各种类型,这样再用起来就不太方便了,就很容易切了。//libtypes.jsimport{wrapval,typedef,typeinit,bool,int32,float64,string,}from'rainforest-js'//你可以使用任何你熟悉的模拟框架import{mock}from'mockjs'//Id仍然是AstringtypeexportconstId=typedef({'@type':string,//需要修改的类型,所以Id是string的修饰类型,仍然是string'@mock':()=>mock('@id'),//可选,如果不是则使用该类型的默认初始化器})exportconstName=typedef({'@type':string,'@mock':()=>mock('@name'),})exportconstSex=typedef({'@type':string,'@mock':()=>(Math.random()>0.5?'male':'female'),'@value':()=>'unknown',//你可以自定义字符串的默认初始值,这很酷})exportconstBirthday=typedef({'@type':string,'@mock':()=>mock('@date'),'@value':()=>'2000-01-02',})exportconstAvatar=typedef({'@type':string,'@mock':()=>mock('@image("120x120")'),'@value':()=>'https://example.com/default-avatar.png',})exportconsttext=typedef({'@type':string,'@mock':()=>mock('@sentence(5)'),})Vue3也适用,也许更好summary的写法和以往的普通数据没有太大的区别,很快就能用上。由于其复用性强,随着积累,代码可能会写的越来越少,有点奇怪。
