在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框
数据定义
const rowSelections = ref<Record<string, ComputedRef<object> | null>>({})
数据初始化,其中list是一个数组,具有唯一的id属性
list.value.forEach((el) => {
rowSelections.value[el.id] = null
})
组件A中定义了计算属性rowSelection
const isBatching = ref<boolean>(false)
const rowSelection = computed(() => {
if (isBatching.value) {
return {
columnWidth: 30,
selectedRowKeys: selectedRowKey.value,
getCheckboxProps: (record) => {
return {
props: {
disabled: !isActivated(record)
}
}
},
onChange: (selectedRowKeys: string[], selectedRows) => {
selectedRowKey.value = selectedRowKeys
}
}
}
return null
})
当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection
const batchEdit = () => {
isBatching.value = true
selectedRowKey.value = []
emit('rowSelectionChange', {
rowSelection,
id: props.id
})
}
在父组件中进行事件定义并更新内容
const rowSelectionChange = ({
rowSelection,
id
}) => {
rowSelections.value[id] = rowSelection
}
rowSelections的使用
<a-table
:row-selection="rowSelections[text.id]"
:columns="columns"
:data-source="data"
/>
ref与reactive的区别
在Vue 3中,ref和reactive都是用于响应式数据绑定的API,但它们之间有一些区别:
ref用于包装简单的数据类型,而reactive用于包装复杂的数据类型,可以更好地处理数据的变化和更新
因此你需要使用
reactive