我的数据库中有一些记录,但并非所有记录都有标签,有些记录可能为空,它们存储在CosmosDb上并作为Json数组返回。
我正在使用antd表和标签: https://ant.design/components/table/
示例:标签
我有以下代码:
import React, { Component } from 'react';
import { Table, Tag} from 'antd';
import { adalApiFetch } from '../../adalConfig';
import Notification from '../../components/notification';
class ListPageTemplatesWithSelection extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
fetchData = () => {
adalApiFetch(fetch, "/PageTemplates", {})
.then(response => response.json())
.then(responseJson => {
if (!this.isCancelled) {
const results= responseJson.map(row => ({
key: row.Id,
Name: row.Name,
SiteType: row.SiteType,
Tags: row.Tags
}))
this.setState({ data: results });
}
})
.catch(error => {
console.error(error);
});
};
componentDidMount(){
this.fetchData();
}
render(){
const columns = [
{
title: 'Id',
dataIndex: 'key',
key: 'key',
},
{
title: 'Name',
dataIndex: 'Name',
key: 'Name',
},
{
title: 'Site Type',
dataIndex: 'SiteType',
key: 'SiteTy[e',
},{
title: 'Tags',
key: 'Tags',
dataIndex: 'Tags',
render: Tags => (
<span>
{Tags.map(tag => {
let color = tag.length > 5 ? 'geekblue' : 'green';
if (tag === 'loser') {
color = 'volcano';
}
return <Tag color={color} key={tag}>{tag.toUpperCase()}</Tag>;
})}
</span>
),
}
];
const rowSelection = {
selectedRowKeys: this.props.selectedRows,
onChange: (selectedRowKeys) => {
this.props.onRowSelect(selectedRowKeys);
}
};
return (
<Table rowSelection={rowSelection} columns={columns} dataSource={this.state.data} />
);
}
}
export default ListPageTemplatesWithSelection;
但是我有这个错误:
58 | dataIndex: 'Tags',
59 | render: Tags => (
60 | <span>
> 61 | {Tags.map(tag => {
62 | let color = tag.length > 5 ? 'geekblue' : 'green';
63 | if (tag === 'loser') {
64 | color = 'volcano';
我不确定此错误是否是因为某些行没有标签,还是由于其他原因而导致的错误,无论如何,我不确定应该怎么做才能避免这种情况。
答案 0 :(得分:1)
如果“标记”可能为空,则必须添加一个检查,以免将其映射到渲染上
<span>
{Tags && Tags.map(tag => {
let color = tag.length > 5 ? 'geekblue' : 'green';
if (tag === 'loser') {
color = 'volcano';
}
return <Tag color={color} key={tag}>{tag.toUpperCase()}</Tag>;
})}
</span>
答案 1 :(得分:1)
您可以在映射标签之前尝试检查标签是否存在
render: Tags => (
<span>
{ Tags ? Tags.map(tag => {
let color = tag.length > 5 ? 'geekblue' : 'green';
if (tag === 'loser') {
color = 'volcano';
}
return <Tag color={color} key={tag}>{tag.toUpperCase()}</Tag>;
})
: ''}
</span>
)