记录一个bug

接口格式该字段是 string,多个id可以通过空格分割,如下图。虽然我们是ts,但是只能把类型写成string

1
{notify_groups: "2 1" }

新增时,用户操作完,需要按空格 join

1
transportData.notify_groups = transportData.notify_groups.join(' ');

编辑时从接口获取数据再按空格split

1
notify_groups = curStrategyObj.notify_groups.length > 0 ? curStrategyObj.notify_groups.split(' '): []

但是编辑时候有问题,只展示id如下图。

why ? 因为从图一可以看,该Select是从接口获取的,id为number,而前端的组件是将展示的label和背后实际的value分开的。拿该组件距离,它展示的name字段,但是读到的数据是id字段。

1
2
3
4
5
const notifyGroupsOptions = notifyGroups.map((ng: Team) => (
<Option value={ng.id} key={ng.id}>
{ng.name}
</Option>
));

Bug怎么产生的呢?因为split 后的数据还是string,而该组件向外抛(或者获取)的数据是number。前端改起来很容易,map时候加个Number方法处理一下就好。

由此bug想到,如果后端把该字段设计成 number[],前端这么多transfrom就都不必了,还可以用ts的interface来静态检查。何况本来就是user-groups的id字段组成的。