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

DevExtreme List选中项不保留问题求助

解决DevExtreme List选中状态丢失问题

问题根源

父组件(App)更新selectedItem状态触发重渲染时,DevExtreme List组件会被重新初始化,其内部维护的选中状态被重置,导致选中项丢失。

具体解决方案

方案一:给List添加固定key

给List设置一个稳定不变的key,让React识别它是同一个组件实例,避免重渲染时销毁重建:

<List
  key="product-list"
  dataSource={products}
  itemRender={itemRender}
  onItemClick={handleItemClick}
  selectionMode="single"
/>

方案二:手动绑定选中状态

不依赖List内部状态,通过selectedItem控制选中项,绑定selectedItemKeys属性同步状态:

<List
  dataSource={products}
  itemRender={itemRender}
  onItemClick={handleItemClick}
  selectionMode="single"
  selectedItemKeys={selectedItem ? [selectedItem.ID] : []}
/>

这样每次重渲染时,List会根据selectedItemKeys自动恢复选中状态。

方案三:封装List并优化渲染(可选)

把List封装成独立组件,用React.memo包裹,减少不必要的重渲染:

const ProductList = React.memo(({ products, onItemClick, selectedItem }) => (
  <List
    dataSource={products}
    itemRender={({ data }) => <div>{data.Name}</div>}
    onItemClick={onItemClick}
    selectionMode="single"
    selectedItemKeys={selectedItem ? [selectedItem.ID] : []}
  />
));

在App组件中使用这个封装后的组件,只有当传入的products、onItemClick或selectedItem变化时,List才会重新渲染。

内容的提问来源于stack exchange,提问作者Dany Dhondt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:26:55