这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
前言
strapi是一款非常优秀的Headless CMS框架,它提供了非常多的数据库可供选择,但又做了充足的工作,使得各个数据库的使用差异都被抹平了。
不仅如此,strapi在一些经典的数据库类型上,增加了自己的理解。除了常规的text、number、boolean类型,它还为联表查询设计了一种更为方便的Relation类型。基于这种类型,我们可以清晰的明白各个表之间的关联性。这为初学者也提供了很多方便。
当然,本文讲述的重点是Component类型和Dynamic Zone,数据类型在笔者前几篇均有讲述,本文旨在重点讲述Component类型的使用。但在这之前,我们需要讲述Strapi里面的singleType和collectionType。
singleType VS collectionType
我们不从原理上讲解他们的区别,因为在实际使用时,我们不需要关心这些。我们先从字面意思看这两者。collection表示集合,说明他有很多条记录。single代表单个,也就是一条记录。
在使用上,我们经常使用singleType作为我们的配置数据。他们不需要设置多个,只需要一条数据即可。
Component
顾名思义,他就是组件的意思。简单理解,他就是对常规类型的一种封装。使得它可以包含多种类型。他的出现,给数据类型提供了更多扩展类型。我们可以通过这种方式,搭积木一样的搭出我们想要的类型。
常规用法
他的实际方式不是建一张数据表,因此,你可以认为他的成本较低。那么,当我们遇到一些需要使用数据库,但不想要建一张数据表这样耗费很多成本的方式,那么就可以尝试使用component类型。例如,我们需要一些全局配置存储在数据库。但是全局配置,基本都是很少的几条数据,不值得为他们创造很多张表。那么我们就可以使用component的方式把他们全部都组合在一起。
上面这张图就很清晰的显示了如何将一些不值得建表的类型封装成Component,然后再放入一张singleType的表中。
除了一些配置项我们需要使用component,一些字段,我们仍需要component来封装使用,这样能够提供更加清晰实用的使用。
缺陷
- Relation类型会做限制。
- 一个组件不相当于表,无法通过api获取。
Dynamic Zone
这个是基于component的类型。它提供一个动态选择组件。例如,在一个需要大部分相同字段,但部分字段有所区别的情况。这种情况,原本需要自己去增加一个判断字段或者直接建两个表。但现在不一样,我们可以针对不同的部分创建两个组件。他们都属于一个dynamic zone类型的字段。
当然,一条记录可以同时使用这两个组件。