【JS】在 Vue 中使用 Struct

【JS】在 Vue 中使用 Struct

我发现在 Vue 中使用 Struct 能够解决一直困扰我的几个最直接的问题。

  • 数据结构复用问题,避免复制粘贴样板代码。
  • 简单、快速的模拟数据,并且非常方便在正常数据和模拟之间切换。
  • 方便设置字段的初始值,不用每次用到都再赋值一次。
  • 让字段具有类型语义,这样我一眼看过去,就能很清晰的知晓某个结构到底是干什么的了。
  • 一步到位,直接初始化包含多层子结构的完整结构。

解决上述问题,只用 Struct 最基本功能就可以了,暂不深究其他能力,不然内容着实有些多,滔滔不绝~~~

我们就先入个门吧。想要掌握更多能力的同学请移步:
https://rainforesters.github....

在 Vue 中使用 Struct

我们用可复用的字段类型,来定义某一组件所特有的数据结构。
允许字段有对应的初始值。
可以使用模拟数据,并能简便切换回正常数据。

直接上代码来预览一下。

// user.vue 用来展示用户信息

// 引入 rainforest-js

import { wrapval, typedef, typeinit } from 'rainforest-js'

// 引入已经定义好的类型描述,我们可以复用它们

import { Id, Name, Sex, Birthday, Avatar } from './libtypes'

export default {

data() {

// 定义数据结构

const UserStruct = typedef({

id: Id,

name: Name,

sex: Sex,

birthday: Brithday,

avatar: Avatar,

})

// 初始化数据结构,字段都会初始化为对应类型的初始值

// return typeinit(UserStruct)

// return typeinit(UserStruct, {

// name: 'Amy', // 不使用初始值,直接赋值

// })

// or

// 可选的,使用 wrapval({ '@mock': true }) 来切换模拟数据

return typeinit(UserStruct, wrapval({ '@mock': true }))

// return typeinit(UserStruct, wrapval({ '@mock': true }, {

// name: 'Amy', // 不使用模拟值,直接赋值

// }))

},

}

如上所示,写法和以往的普通 data 没有什么大区别,复用性和语义性大大提高了,字段初始值也不必每次都进行赋值,切换模拟数据也非常方便。

// comment.vue 用户评论

// 引入 rainforest-js

import { wrapval, typedef, typeinit, int32 } from 'rainforest-js'

// 引入已经定义好的类型描述,我们可以复用它们

import { Id, Name, Avatar, Text } from './libtypes'

export default {

data() {

const CommentStruct = typedef({

user: typedef({

id: Id,

name: Name,

avatar: Avatar,

}),

text: Text,

id: Id,

praise: int32,

})

return typeinit(CommentStruct, wrapval({ '@mock': true }))

},

}

如上所示,我们实实在在的复用了一把相同的字段类型,省了不少事,代码也很漂亮。

可以积累沉淀的类型库

在前面的代码中可以看到,我们定义了通用的类型库,这让我们可以复用很多类型。
随着日常开发,我们可以非常简单的不断积累沉淀各种类型,这样当再次使用时就不要太方便了,好伐。

// libtypes.js

import {

wrapval,

typedef,

typeinit,

bool,

int32,

float64,

string,

} from 'rainforest-js'

// 可以使用任意你熟悉的模拟框架

import { mock } from 'mockjs'

// Id 依然是一个 string 类型

export const Id = typedef({

'@type': string, // 待修饰的类型,所以 Id 是 string 的修饰类型,依然是 string

'@mock': () => mock('@id'), // 可选,如果没有则使用类型的默认初始值

})

export const Name = typedef({

'@type': string,

'@mock': () => mock('@name'),

})

export const Sex = typedef({

'@type': string,

'@mock': () => (Math.random() > 0.5 ? 'male' : 'female'),

'@value': () => 'unknown', // 可以自定义 string 的默认初始值,很酷吧

})

export const Birthday = typedef({

'@type': string,

'@mock': () => mock('@date'),

'@value': () => '2000-01-02',

})

export const Avatar = typedef({

'@type': string,

'@mock': () => mock('@image("120x120")'),

'@value': () => 'https://example.com/default-avatar.png',

})

export const Text = typedef({

'@type': string,

'@mock': () => mock('@sentence(5)'),

})

Vue3

自然也是适用的,或许会更好用。

总结

写法和以往的普通 data 没有什么大区别,可以快速上手使用。由于其强大的复用性,随着积累,代码可能会越写越少,有点小奇怪哈。

以上是 【JS】在 Vue 中使用 Struct 的全部内容, 来源链接: utcz.com/a/91822.html

回到顶部