全选,取消,单选拼接ID

 本案例是在react项目实战中使用的,需求是把选中的列表项的id以“,”号拼接作为参数,修改状态。后台给的是数据列表,并没有可供是否选中的参数作为判断依据。这就需要前端多相关的数据处理。

 

案例分析

1,首先需要对后台数据保存本地,遍历添加一个checket=false属性,因为开始是未选中状态。

 // 数据解析
    set_awardData(arr){
        arr.forEach(element => {
           
                element.checket = false; 
            
        }); 
        return arr
    }

2,需要一个全选按钮,组需要一个全局checkets=false ,然后还需要声明一个awardData:[]  数组,把后台数据保存本地。

 this.state={  
     awardData:[],     //请求保存本地data数据    
     checkets:false,   // 全选状态对象
 }

 3,需要通过全选按钮改变列表是数据的选中状态,注意此处运用到深拷贝,本案例深拷贝函数放在工具文件util.js 文件里面,这里直接引用了。

// 全选、取消
   All_election(){
    let data = Util.deepCopy(this.state.dataList) 
    if(this.state.checkets===false){
        this.setState({
          dataList:this.set_awardData(data,false),
            checkets:true
        },()=>{
            this.set_pushId()
        })
    }else{
        this.setState({
          dataList:this.set_awardData(data,true),
            checkets:false
        },()=>{
            this.set_pushId()
        })
      }
    }

 深拷贝:这里你也可以吧这个函数放在你当前文件直接引用,但建议放到工具文件中,可以全局统一调用。

// 深拷贝
function deepCopy(obj) {
  var result = Array.isArray(obj) ? [] : {};
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object' && obj[key]!==null) {
        result[key] = deepCopy(obj[key]);   //递归复制
      } else {
        result[key] = obj[key];
      }
    }
  }
  return result;
}

4,单个列表的选中,取消,这里是根据下标index  改变checket 的值

// 单选、取消
    option_election(index){
      let data = Util.deepCopy(this.state.dataList)
      data[index].checket = !data[index].checket;
      this.setState({
        dataList:data
      },()=>{
          this.set_pushId()
      })
  }

 5,到这里你会发现,一直在调用set_pushID()函数,对这就是凭借id的函数

// 推送id拼接
  set_pushId(){
      let data = Util.deepCopy(this.state.dataList);
      let isPush = []
      data.forEach(element=>{
          if(element.checket == true){
              isPush.push(element.account)
          }
      })
      return isPush.join(',')
  }

 好了,这个功能就实现了,下面是全部代码,但是别忘了,要加上深拷贝的函数。


// 数据解析
    set_awardData(arr){
        arr.forEach(element => {
               element.checket = false; 
        }); 
        return arr
    }
// 全选、取消
    All_election(){
        let data = Util.deepCopy(this.state.awardData) 
        if(this.state.checkets===false){
            this.setState({
                awardData:this.set_awardData(data,false),
                checkets:true
            },()=>{
                // console.log(this.state.awardData)
                this.set_pushId()
            })
        }else{
            this.setState({
                awardData:this.set_awardData(data,true),
                checkets:false
            },()=>{
                // console.log(this.state.awardData)
                this.set_pushId()
            })
        }
    }
    // 单选、取消
    option_election(index){
        // console.log(index)
        let data = Util.deepCopy(this.state.awardData)
        data[index].checket = !data[index].checket;
        this.setState({
            awardData:data
        },()=>{
            this.set_pushId()
        })
    }
    // 推送id拼接
    set_pushId(){
        let data = Util.deepCopy(this.state.awardData);
        let isPush = []
        data.forEach(element=>{
            if(element.checket == true){
                isPush.push(element.matchId)
            }
        })
        return isPush.join(',')
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值