You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用ui.select的on_change回调排序数据后,表格消失问题求助

问题排查与解决:NiceGUI表格排序后消失

问题原因

直接调用list.sort()原地修改table.options.rowData数组,再执行table.update()时,NiceGUI表格底层依赖的AG Grid无法正确识别这种原地数据变更,导致表格渲染异常并从页面消失。

解决办法

方法1:生成新数组替换原数据

避免原地修改数组,基于原数据生成排序后的新数组赋值给rowData,再触发组件更新:

from nicegui import ui

table = ui.table({
    'columnDefs': [
        {'headerName': 'Task id', 'field': 'taskId'},
    ],
    'rowData': [
        {'taskId': 1},
        {'taskId': 2},
        {'taskId': 3},
        {'taskId': 4},
        {'taskId': 5},
    ],
})

def sortTable(sender):
    sorted_data = sorted(table.options.rowData, 
                        key=lambda task: task['taskId'], 
                        reverse=(sender.value == 'Descending'))
    table.options.rowData = sorted_data
    table.update()

with ui.row():
    ui.select(['Ascending', 'Descending'], on_change=sortTable, value='Ascending', label='Sort by')

ui.run()

方法2:使用响应式变量(推荐)

将表格数据存入reactive响应式对象,数据变化时自动触发表格更新,无需手动调用table.update():

from nicegui import ui, reactive

table_data = reactive([
    {'taskId': 1},
    {'taskId': 2},
    {'taskId': 3},
    {'taskId': 4},
    {'taskId': 5},
])

table = ui.table({
    'columnDefs': [
        {'headerName': 'Task id', 'field': 'taskId'},
    ],
    'rowData': table_data,
})

def sortTable(sender):
    table_data.sort(key=lambda task: task['taskId'], 
                   reverse=(sender.value == 'Descending'))

with ui.row():
    ui.select(['Ascending', 'Descending'], on_change=sortTable, value='Ascending', label='Sort by')

ui.run()

内容的提问来源于stack exchange,提问作者Stan Sakun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:35:18