react 涉及的增加,删除list

56 篇文章 2 订阅
45 篇文章 2 订阅

做的项目中有一个功能是需要对多个Input组成的list可以新增和删除。

刚开始想的解决是直接使用index来做,这个可以新增,但是做不了删除,会出现list错乱的问题,即使是删除中间的某一个,但总也是删除的最后一个。原因是index-1只会删除最后一个,再重新渲染后会刷新列表。

如果只是新增但是不填写内容,那么删除了也无所谓,但如果新增后填写再删除就出问题了。

解决办法是使用唯一标识符,也就是id,就是前端自己生成id,根据id删除就不会错乱了。

在这个项目中,因为新建和编辑是同一个页面,而且在进入这个页面之后会根据是否有xxId来区分是新建还是编辑,因为会请求两个不同的接口来获取数据。所以在从接口请求回来的返回值那边做了处理,添加了唯一标识符,也就是selfId。我是对dispatch后获取的result进行操作。如下

const dealListData = (result) => {
    // console.log('listR', result);
    if (result.length===0) {
        result.push({
            selfId:1
        });
    } else {
        result.map((item, index) => {
            item.selfId = String(index + 1);
            return item;
        });
    }
    // console.log(result);
    return result;
};

新增的函数                         list是指几个Input组成的块,是要对其新增和删除

handleAdd = () => {
     let selfId = Number(this.state.list[this.state.list.length-1].selfId) + 1;
     // console.log(this.state.list[this.state.list.length-1].selfId +1);
     this.props.form.validateFields((err, value) => {
        if (!err) {
            this.state.list.push({
                selfId:selfId
        });
        this.props.onChange(this.state.list);
      }
   });
}

删除的函数

handleDeleteItem = (i, selfId) => {
    this.setState({ list: this.state.list.filter(item => item.selfId !== selfId) }, () => {
          // console.log('delete', this.state.list);
          this.props.onChange(this.state.list);
    });
}

根据selfId进行删除

因为list是我又重新封装的子组件,而值要实时反映到父组件上去,需要都需要通过this.props.onChange事件去实时更新。这样删除和新增就没有问题了。

总结:不能根据下标index进行新增删除,会错乱。需要有唯一标识符用来更新。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值