Ant-Design Table组件实现自定义空数据状态样式

写在前面

几乎在所有的前端UI中,Table组件都有着不可或缺的作用,Table组件对于数据展示,有着天然的优势。
Ant-Design官网上,对于Table组件,有着非常详细的API和Demo,比如自带可编辑单元格、可编辑行功能,是其他部分UI中所没有的。但是对于Table组件数据为空时的渲染样式,却没有直接的文档说明。本人之前从事Vue+ElementUI进行开发,ElementUI中Table组件,可以直接通过empty-text属性,或者slot="empty"进行配置。效果如下图:
Table组件数据为空时展示效果

ConfigProvider全局化配置

关于ConfigProvider组件,官方API文档链接在此:ConfigProvider API
Ant Design官网对ConfigProvider的解释是:

为组件提供统一的全局化配置。
ConfigProvider 使用 React 的 context 特性,只需在应用外围包裹一次即可全局生效。

比如ConfigProvider提供了autoInsertSpaceInButton参数,可以全局移除按钮中2个汉字之间的空格;提供了参数componentSize,可以配置全局ant design组件大小。当然还包括其他一系列参数可以对全局进行配置。
众多参数中,其中一个参数是renderEmpty,可以自定义组件空状态,类型为function(componentName: string): ReactNode,只需要将Table组件外面包一层ConfigProvider,并设置renderEmpty参数,即可实现Table组件的空状态。实例代码如下:

    renderEmpty = () => (
        <Empty
            imageStyle={{
                height: 60,
            }}
            description={
                <span>
                    未添加明细
                </span>
            }
        >
            <Button type='primary' onClick={() => data.push({id: 123, field: 'aaa', fieldName: 'aaaaaa'})}>添加</Button>
        </Empty>
    )

    render() {
        return (
            <Form ref={this.formRef} initialValues={this.state.editRow} component={false}>
                <ConfigProvider renderEmpty={this.renderEmpty}>
                    <Table
                        rowKey={record => record.id}
                        components={{
                            body: {
                                cell: EditableCell,
                            },
                        }}
                        bordered
                        dataSource={data}
                        columns={this.convertedColumns}
                        rowClassName='editable-row'
                        pagination={{
                            onChange: cancel,
                        }}
                    />
                </ConfigProvider>
            </Form>
        );
    }

实际运行效果如下:
AntD中Table组件空状态效果

最后

至此关于Table组件空状态的代码就已经实现完毕。ConfigProvider提供了非常强大的全局化配置功能,不仅仅限于配置空状态,对于ConfigProvider的其他功能,还是很有必要去深入学习的。

### 使用 `customRow` 实现 Ant Design Vue 表格组件自定义Ant Design Vue 的 Table 组件中,`customRow` 属性提供了一种方法来定制每行的行为和样式。这使得开发人员能够根据特定的需求调整表格的功能。 #### 定制行点击事件 为了响应用户的交互行为,比如当用户单击某一行时触发某些操作,可以通过设置 `customRow` 来监听这些动作: ```javascript const columns = [ { title: &#39;Name&#39;, dataIndex: &#39;name&#39; }, // ...其他列配置... ]; const data = [ { key: &#39;1&#39;, name: &#39;John Brown&#39; }, // ...更多数据条目... ]; // 自定义行属性 const rowSelection = { customRow: record => ({ onClick: event => console.log(`Clicked on ${record.name}`, event), }) }; ``` 上述代码展示了如何利用 `customRow` 函数返回的对象中的 `onClick` 方法处理行级别的点击事件[^2]。 #### 动态应用样式到指定行 除了添加交互逻辑外,还可以依据业务规则动态改变行的颜色或其他CSS属性。例如,对于满足一定条件的数据记录给予视觉上的突出显示: ```vue <template> <a-table :columns="columns" :data-source="data"> <!-- 这里省略了其他的 prop --> </a-table> </template> <script setup lang="ts"> import { ref } from &#39;vue&#39;; const columns = [...]; // 列定义同上 let data = ref([ { key: &#39;1&#39;, name: &#39;Jack&#39;, age: 32, address: &#39;New York No. 1 Lake Park&#39;}, { key: &#39;2&#39;, name: &#39;Lucy&#39;, age: 24, address: &#39;London No. 1 Lake Park&#39;} ]); function highlight(row){ return{ style:{ backgroundColor:(row.age>30)?&#39;#f8d7da&#39;:&#39;white&#39; } }; } const rowProps={ customRow:highlight, } </script> ``` 在这个例子中,如果一个人的年龄超过30岁,则该行背景会变成浅红色;否则保持默认白色背景颜色。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值