diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index 63f90edb4f9..b984e91eb44 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/src/components/Table/src/hooks/useRowSelection.ts @@ -1,6 +1,6 @@ import { isFunction } from '/@/utils/is'; import type { BasicTableProps, TableRowSelection } from '../types/table'; -import { computed, ref, unref, ComputedRef, Ref, toRaw, watch } from 'vue'; +import { computed, ref, unref, ComputedRef, Ref, toRaw, watch, nextTick } from 'vue'; import { ROW_KEY } from '../const'; import { omit } from 'lodash-es'; @@ -24,12 +24,6 @@ export function useRowSelection( onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => { selectedRowKeysRef.value = selectedRowKeys; selectedRowRef.value = selectedRows; - const { onChange } = rowSelection; - if (onChange && isFunction(onChange)) onChange(selectedRowKeys, selectedRows); - emit('selection-change', { - keys: selectedRowKeys, - rows: selectedRows, - }); }, ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']), }; @@ -38,7 +32,24 @@ export function useRowSelection( watch( () => unref(propsRef).rowSelection?.selectedRowKeys, (v: string[]) => { - selectedRowKeysRef.value = v; + setSelectedRowKeys(v); + } + ); + + watch( + () => unref(selectedRowKeysRef), + () => { + nextTick(() => { + const { rowSelection } = unref(propsRef); + if (rowSelection) { + const { onChange } = rowSelection; + if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows()); + } + emit('selection-change', { + keys: getSelectRowKeys(), + rows: getSelectRows(), + }); + }); } );