在 mobx 商店中更改状态时,Ant-Design Table 不呈现

Posted

技术标签:

【中文标题】在 mobx 商店中更改状态时,Ant-Design Table 不呈现【英文标题】:Ant-Design Table not rendering when change state in mobx store 【发布时间】:2020-09-27 09:29:31 【问题描述】:

我对 ant design Table 组件中单击一行的行为进行了编程。这应该会更改表格上的 rowClassName。 Here is an example on CodeSendBox。当您单击表格行时,Store.selectedRowKey 中的值会发生变化,但表格不会重新呈现。如果将分割滑块移动到沙箱并且表格大小发生变化,则会进行渲染并应用新的行选择

这是另一个例子,mobx 不支持 ant-design Table

Ant Design Table with Modal form CRUD

我是 Mobx 的新手 我真的很想了解我做错了什么

【问题讨论】:

要重新渲染 ant 设计表,我使用这里解释的钩子:***.com/questions/46240647/… 【参考方案1】:

要重新渲染 Ant-Design 表,您必须将数据源值作为可观察值的克隆传递。

你必须改变

<Table
    columns=columns
    dataSource=values
/>

转至以下代码:

<Table
    columns=columns
    dataSource=[...values]
/>

【讨论】:

@Nechama 你能解释一下为什么会这样吗? 在性能方面似乎效率低下,但这也是它对我有用的唯一方法【参考方案2】:

基本上你不会在你的观察者组件中使用selectedRowKey,所以这就是它在改变时不会重新渲染的原因。

您将回调函数传递给Table,但Table 不是观察者。

我不确定是否可以在antd 中使其成为观察者,但您还能做什么:

1) 只需在渲染中某处使用selectedRowKey。就像console.log 一样,然后单击行时您的整个组件将重新呈现(包括表格)。

或者更好的方法,将它与data 行混合,例如为内部渲染的每个数据添加isSelected 键并更改rowClassName 以使用此标志:

dataSource=data.map(item => (...item, isSelected: this.props.Store.selectedRowKey === item.key))
rowClassName=x => x.isSelected ? 'test-table-row-selected' : ''

2) 使用 antd rowSelectionrowSelection=selectedRowKeys: [selectedRowKey] 这样的道具。但它也会为每一行添加复选框。

【讨论】:

以上是关于在 mobx 商店中更改状态时,Ant-Design Table 不呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何在mobx-react提供商彼此依赖时添加商店?

状态更改时未调用 ngrx 商店订阅

商店状态更改时反应组件不更新

Mobx 仅在计算值更改时重新渲染项目

Mobx makeAutoObservable 没有绑定这个

markdown mobx商店创意