【前端】【ant-design踩坑】对话框关闭后,穿梭框里的批量操作没有更新选中状态

前言:

经验之谈-官方文档一定要看仔细!

问题:

在Modal对话框里加入带搜索的Transfer穿梭框,如果批量操作的是选中状态,关闭对话框再重新打开,状态没有刷新,如下图

解决思路:

1.首先去ant design官网找相关api,发现了如下图几个api是可以控制选中状态的,分别是selectedKeys,onSelectChange

2.把sourceSelectedKeys,targetSelectedKeys放在state里,初始化为空数组,调用onSelectChange的时候赋值更新,关闭对话框的时候再将这两个置为空数组。然后在Transfer里面新加selectedKeys这个属性,值为

[...sourceSelectedKeys,...targetSelectedKeys]

实现:

1.我是写了两个组件,在一个名为Transfer的组件里写一个按钮用来控制对话框的显示隐藏,以及穿梭框的onChange和onSelectChange事件,并将该组件作为父组件,引入另一个组件TransferModal,之所以将那些change事件写在父组件,是因为需要改变的值都存在了父组件的state中,方便修改。

2.主要代码如下:

state的内容

this.state = {
  modalVisible: false, // 对话框的显示状态
  mockData: [
    {
      key: '12',
      title: '小英雄',
      chosen: true,
    },
    {
      key: '14',
      title: '小排球',
      chosen: true,
    },
    {
      key: '13',
      title: '闪耀暖暖',
      chosen: false,
    },
    {
      key: '16',
      title: '偶像梦幻祭',
      chosen: false,
    },
  ], // 穿梭框的所有信息
  targetKeys: ['12', '14'], // 已选中的节点id
  sourceSelectedKeys: [], // 可选框的id
  targetSelectedKeys: [], // 已选框的id
}

点击穿梭框中的批量操作框

onSelectChange = (s, t) => {
    this.setState({
      sourceSelectedKeys: s,
      targetSelectedKeys: t,
    })
  }

关闭对话框:

closeModal = () => {
    this.setState({
      modalVisible: false,
      sourceSelectedKeys: [],
      targetSelectedKeys: [],
    })
  }

穿梭框内的属性api:

<Transfer
          dataSource={mockData}
          showSearch
          filterOption={this.filterOption}
          targetKeys={targetKeys}
          onChange={handleChange}
          onSearch={this.handleSearch}
          selectedKeys={[...sourceSelectedKeys, ...targetSelectedKeys]}
          onSelectChange={onSelectChange}
          render={item => item.title}
        />

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值